- 締切済み
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を組み立てたらいいでしょうか。 教えて下さい。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hamachi98
- ベストアンサー率100% (5/5)
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)
サブクエリつかえばよいのでは? 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が正規化されておらず、エラーにはならないですが微妙です。