- 締切済み
効率の良いSQL文の書き方を教えてください
MySQLで開発をしています。 1回のSQLで、下記テーブルの内容を日付・ユーザ番号毎(日付・ユーザ番号が同じ時に同じレコード)に、 型番1個数、 型番2個数、 その他が2か3で型番2・品番1個数、 その他が2か3で型番2・品番1個数、 その他が2か3で型番2・品番1での売上小計、 その他が2か3で型番2・品番2個数での売上小計、 売上合計、 以上の各カラムを持つテーブルに再編して返したいのですが、 効率の良いやり方がわかりません。 どなたかよろしくお願いします。 テーブル ユーザ番号 日付 型番 品番 売上 その他 ----- --- --- --- --- --- 001 3/10 1 2 500 1 001 3/10 2 1 0 1 003 3/11 2 1 100 2 004 3/12 1 1 100 2 005 3/12 2 2 0 2 001 3/13 1 2 500 1 003 3/13 2 1 100 2 003 3/13 2 1 0 3 002 3/14 1 1 100 3 005 3/15 2 2 0 1
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yamada_g
- ベストアンサー率68% (258/374)
CASE文で条件ごとに集計すればいいのではないでしょうか? 一部あやふやな項目があったので雰囲気だけでも。 select ユーザ番号,日付 ,count(case when 型番 = 1 then 1 else null end) 型番1個数 ,count(case when 型番 = 2 then 1 else null end) 型番2個数 ,count(case when その他 in (2,3) and 型番 = 2 and 品番 = 1 then 1 else null end) 型番2品番1個数 ,count(case when その他 in (2,3) and 型番 = 2 and 品番 = 2 then 1 else null end) 型番2品番2個数 ,sum(case when その他 in (2,3) and 型番 = 2 and 品番 = 1 then 売上 else 0 end) 型番2品番1売上 ,sum(case when その他 in (2,3) and 型番 = 2 and 品番 = 2 then 売上 else 0 end) 型番2品番2売上 ,sum(売上) 合計売上 from テーブル group by ユーザ番号,日付 order by ユーザ番号,日付; MySQLは詳しくないのですが、sum(型番=1) という書き方ができるのですね。
- yambejp
- ベストアンサー率51% (3827/7415)
ざっくりこんな感じ? select ユーザ番号,日付 ,sum(型番=1) AS 型番1個数 ,sum(型番=2) AS 型番2個数 ,sum((その他 IN (2,3))*(型番=2)*(品番=1)) AS その他が2か3で型番2・品番1個数 ,sum((その他 IN (2,3))*(型番=2)*(品番=1) * 売上) AS その他が2か3で型番1・品番1売上小計 ,sum((その他 IN (2,3))*(型番=2)*(品番=2)) AS その他が2か3で型番2・品番2個数 ,sum((その他 IN (2,3))*(型番=2)*(品番=2) * 売上) AS その他が2か3で型番2・品番1売上小計 ,sum(売上) AS 売上合計 from テーブル group by ユーザ番号,日付
お礼
ご回答、誠にありがとうございました。 質問が判りにくくて、申し訳ありませんでした。 おかげで意図する結果を得る事ができました。
お礼
ご回答、誠にありがとうございました。 質問が判りにくくて、申し訳ありませんでした。 おかげで意図する結果を得る事ができました。