繁体   English   中英

MySQL左连接,求和和group_by

[英]Mysql left join, sum, and group_by

我有4张桌子。 地区土地房屋货物

  • 土地有一对一的关系。 地区
  • 土地有一对多的关系。 房子
  • 房子有一对多的关系。 货物

忙碌的猫

sqlfiddlehttp : //sqlfiddle.com/#!9/5eaec

当前查询

SELECT
    Sum(land.wide) AS land_wide,
    Sum(house.price) AS house_price,
    Sum(goods.amount) AS goods_amount,
    Sum(goods.price) AS goods_price,
    region.region_name
FROM
    land
LEFT JOIN house ON house.land_id = land.id
LEFT JOIN goods ON goods.house_id = house.id
LEFT JOIN region ON land.region_id = region.id
GROUP BY
    region.region_name
ORDER BY
    region.id ASC

但效果不理想。

期望的输出

+-----------+-------------+-------------+--------------+---------+
| land_wide | house_price | goods_price | goods_amount | region  |
+-----------+-------------+-------------+--------------+---------+
| 510       | 57910       | 1900        | 56           | Tokyo   |
|           |             |             |              | Osaka   |
|           |             |             |              | Nagoya  |
|           |             |             |              | Sapporo |
+-----------+-------------+-------------+--------------+---------+

有人会为我提供一个有帮助的解决方案吗? 我很确定可以在SQL中完成?

SELECT 
   land_wides.land_wide, 
   house_prices.house_price, 
   goods_amounts_prices.goods_price, 
   goods_amounts_prices.goods_amount, 
   region.region_name
FROM region
LEFT JOIN (SELECT
              Sum(land.wide) AS land_wide,
              region.id AS region_id
           FROM region
           LEFT JOIN land ON land.region_id = region.id
           GROUP BY region.id) land_wides ON region.id = land_wides.region_id
LEFT JOIN (SELECT
              Sum(house.price) AS house_price,
              region.id AS region_id
           FROM region
           LEFT JOIN land ON land.region_id = region.id
           LEFT JOIN house ON house.land_id = land.id
           GROUP BY region.id) house_prices ON region.id = house_prices.region_id
LEFT JOIN (SELECT
              Sum(goods.amount) AS goods_amount,
              Sum(goods.price) AS goods_price,
              region.id AS region_id
           FROM region
           LEFT JOIN land ON land.region_id = region.id
           LEFT JOIN house ON house.land_id = land.id
           LEFT JOIN goods ON goods.house_id = house.id
           GROUP BY region.id) goods_amounts_prices on goods_amounts_prices.region_id = region.id
ORDER BY region.id

左联接应该是内部联接。 您希望对匹配的行进行分组。 没有不匹配的行,因此按总和分组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM