前提・実現したいこと
検査結果を曜日ごとに集計するQueryを作成しています。
色々なサイトを参考にしてほぼ望み通りのものを作成できましたが、どうしてもうまくいかない部分があります。
発生している問題・エラーメッセージ
テーブルのカラムは
inspected_at Timestamp型(検査日時)
judge 可変長文字列型(良品は'0'、不良品は'0'以外)
です(質問のため単純化)。
これに対してやりたいことは曜日ごとの
1.不良件数
2.良品件数
3.検査件数(1+2の件数)
を取得です。
該当のソースコード
SQL
1SELECT 2 CASE WHEN judge <> '0' THEN '不良数' ELSE '良品数' END, 3 SUM(CASE EXTRACT(dow FROM inspected_at) WHEN 0 THEN 1 ELSE 0 END) AS "日曜", 4 SUM(CASE EXTRACT(dow FROM inspected_at) WHEN 1 THEN 1 ELSE 0 END) AS "月曜", 5 SUM(CASE EXTRACT(dow FROM inspected_at) WHEN 2 THEN 1 ELSE 0 END) AS "火曜", 6 SUM(CASE EXTRACT(dow FROM inspected_at) WHEN 3 THEN 1 ELSE 0 END) AS "水曜", 7 SUM(CASE EXTRACT(dow FROM inspected_at) WHEN 4 THEN 1 ELSE 0 END) AS "木曜", 8 SUM(CASE EXTRACT(dow FROM inspected_at) WHEN 5 THEN 1 ELSE 0 END) AS "金曜", 9 SUM(CASE EXTRACT(dow FROM inspected_at) WHEN 6 THEN 1 ELSE 0 END) AS "土曜" 10FROM tbl_inspect_his_img 11WHERE 12 inspected_at BETWEEN '2020-07-01' AND '2020-07-31' 13GROUP BY CUBE(judge<> '0') 14ORDER BY judge<> '0' 15;``` 16 17### 試したこと 18これを実行すると下図の結果が得られます。 19![イメージ説明](e9aada0e704f154f80e074fb80ac5e3c.png) 20 21数字は合っているのですが、改良したい点は 221.3行目の最初のカラムを'検査数'とする 232.最初のカラム名も'件数'に設定 24です。後者はSELECT句の最初で「AS '件数'」としましたが、エラーで 25実行できませんでした。 26 27もっと、効率的なやり方もあれば、ご教示ください。 28以上、よろしくお願いします。 29 30### 補足情報(FW/ツールのバージョンなど) 31PostgreSQL 10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/15 23:57