• 締切済み

2つのテーブルの集計

MySQLでSQLを書いている初心者です。 ある会社には卸売部門と小売部門があり、同一の商品を扱っています。 それぞれの売上明細は tbl_sales と tbl_retailsales で別になっています。 商品別の2つの部門の売上数量を1行で表現したいと考えています。 下のような感じです。 商品ID 商品名 卸売 小売 ========================= 00001  aaaa  100  10   00002  bbbb  200  13   00003  cccc  300  15   2つのSQLをUNIONでつなげてみましたが同一行に「卸売」「小売」が並んでくれません。 SELECT goodsId, goodsName, sum(quantity) FROM tbl_sales WHERE salesDate BETWEEN '2014-06-01' AND '2014-06-30' GROUP BY goodsId UNION SELECT goodsId, goodsName, sum(quantity) FROM tbl_retailsales WHERE retailSalesDate BETWEEN '2014-06-01' AND '2014-06-30' GROUP BY goodsId どのようにSQLを組み立てたらいいでしょうか。 教えて下さい。 よろしくお願いいたします。

みんなの回答

  • hamachi98
  • ベストアンサー率100% (5/5)
回答No.2

JOIN構文はご存知ですか? 「同一の商品」ということなので、それぞれのテーブルのgoodsIdが指し示すものが同じものだと思うので以下のクエリではいかがでしょうか? SELECT sales.goodsId, sales.goodsName, salesSum, retailsalesSum FROM ( SELECT goodsId, goodsName, SUM( quantity ) AS salesSum FROM tbl_sales WHERE salesDate BETWEEN '2014-06-01' AND '2014-06-30' GROUP BY goodsId ) AS sales JOIN ( SELECT goodsId, goodsName, SUM( quantity ) AS retailsalesSum FROM tbl_retailsales WHERE salesDate BETWEEN '2014-06-01' AND '2014-06-30' GROUP BY goodsId ) AS retailsales ON sales.goodsId = retailsales.goodsId

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

サブクエリつかえばよいのでは? SELECT goodsId, goodsName,sum(sum1) as sum1,sum(sum1) as sum2 FROM ( SELECT goodsId, goodsName, sum(quantity) as sum1,0 as sum2 FROM tbl_sales WHERE salesDate BETWEEN '2014-06-01' AND '2014-06-30' GROUP BY goodsId UNION SELECT goodsId, goodsName, 0,sum(quantity) FROM tbl_retailsales WHERE retailSalesDate BETWEEN '2014-06-01' AND '2014-06-30' GROUP BY goodsId ) as sub GROUP BY goodsId ただし、goodsNameが正規化されておらず、エラーにはならないですが微妙です。

関連するQ&A