[英]Mysql left join, sum, and group_by
我有4张桌子。 地区 , 土地 , 房屋和货物 。
sqlfiddle : http : //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.