- ベストアンサー
MySQLのgroup by同士の結合について
- MySQLのgroup byを使用して、商品毎の販売個数の集計と、販売店毎の販売個数の集計を同時に行いたい場合、どのようなSQL文を使用すれば良いでしょうか?
- 販売テーブルには、商品コード、販売個数、販売店コードのデータが格納されています。
- 商品コード毎の販売個数の合計と、販売店コード毎の販売個数の合計を一度のSQLで取得する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
## 私はANo1の方の回答のようにスカラー副問い合わせ使ったほうがいい ##(適切なインデックスをつけると確実に処理が早いため)と思っていますけど ## 質問文の以下を素直に反映したSQL文を参考までに記載しておきます。 >やり方としては下記の(1)と(2)の結合ができれば良いと考えております。 select A.商品コード,A.販売個数,A.販売店コード,B.商品コード毎販売個数合計 from ( SELECT 商品コード, SUM(販売個数) as 販売個数, 販売店コード FROM 販売テーブル GROUP BY CONCAT(商品コード,'and',販売店コード) ) as A, ( SELECT 商品コード,SUM(販売個数) as 商品コード毎販売個数合計 FROM 販売テーブル group by 販売テーブル.商品コード ) as B where A.商品コード = B.商品コード なお、 GROUP BY CONCAT(商品コード,'and',販売店コード) は GROUP BY 商品コード,販売店コード で問題ない というより、商品コード,販売店コードのインデックス作っても早くならないので 後者のほうがいいのでは? (ファンクションインデックス作るのならいいですが、ファンクションインデックスばかり作ると、 システム全体としてインデックスの数が増える傾向になり効率悪い。) あ、ひょっとして、 販売店コード A1 と販売店コード andA1 を一つにまとめて集計したいということ? (違うと思うけど)なら、そのままでないとだめです。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
別名をつければそれほど難しい話ではないかと select 商品コード ,sum(販売個数) as 販売個数 ,販売店コード ,(select sum(販売個数) from 販売テーブル where 販売店コード=t1.販売店コード) as 商品コード毎販売個数合計 from 販売テーブル as t1 group by 商品コード,販売店コード