• 締切済み

効率の良い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

みんなの回答

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

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) という書き方ができるのですね。

kanemoto_syoko
質問者

お礼

ご回答、誠にありがとうございました。 質問が判りにくくて、申し訳ありませんでした。 おかげで意図する結果を得る事ができました。

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

ざっくりこんな感じ? 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 ユーザ番号,日付

kanemoto_syoko
質問者

お礼

ご回答、誠にありがとうございました。 質問が判りにくくて、申し訳ありませんでした。 おかげで意図する結果を得る事ができました。

関連するQ&A