2016-12-20 2 views
0

私は4つのテーブルを持っています。 領域,土地,ハウスおよび商品Mysqlはjoin、sum、group_byを残しました

  • 土地は1対1の関係を持っています。 領域。 1対多のrelsを持って
  • 土地。 ハウスです。 1対多のrelsを持って
  • 家。 商品である。

a busy cat

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でできていると確信していますか?

+0

達成しようとしていることを詳しく説明できますか?最高の住宅価格を持つ地域を手に入れようとしていますか? – PseudoAj

+0

@PseudoAj私は(SUM)各要素を地域に基づいて計算しようとしています。 – JasonMo

+0

「札幌」は651の土地合計を持っていませんか? – zedfoxus

答えて

1
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 
+0

@ JasonMo plsは正しい場合は答えを受け入れます:) – nayakhilesh

+0

私の遅い返事を申し訳ありません。どうもありがとう。 – JasonMo

0

左結合は内部結合である必要があります。一致する行をグループ化する必要があります。比類のない行ではないため、合計でグループ化されます。

関連する問題