質問: 効率の良い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
回答: 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) という書き方ができるのですね。