「投稿ID(Int型)」「投稿したユーザーID(Int型)」「投稿日時(String型)」が入ったPostテーブルにおいて、
id | user_id | created_at |
---|---|---|
1 | 10 | 2019-11-01T22:11:05.000+09:00 |
2 | 10 | 2019-11-02T22:11:05.000+09:00 |
3 | 20 | 2019-11-01T22:11:05.000+09:00 |
下記のように、投稿ユーザーごとに11/1~11/3それぞれで投稿したかどうかを判定する出力を出したいです。(投稿した日は「true」、投稿していない日は「false」)
|user_id|11/1|11/2|11/3|
|:--|:--:|--:|
|10|true|true|false|
|20|true|false|false|
その際に、下記のようなクエリを作成したのですが、投稿日時もGROUP BYしてしまっているため、1ユーザーに対して3行出力されてしまっているが現状です。
SQL
1SELECT DISTINCT 2 user_id, 3 CASE 4 WHEN SUBSTRING(created_at, 1, 10) = '2019-11-01' THEN 'true' 5 ELSE 'false' 6 END AS one_day, 7 CASE 8 WHEN SUBSTRING(created_at, 1, 10) = '2019-11-02' THEN 'true' 9 ELSE 'false' 10 END AS two_day, 11 CASE 12 WHEN SUBSTRING(created_at, 1, 10) = '2019-11-03' THEN 'true' 13 ELSE 'false' 14 END AS three_day 15FROM 16 posts 17WHERE 18 DATE(SUBSTRING(created_at,1,10)) BETWEEN DATE('2019-11-01') AND DATE('2019-11-03') 19GROUP BY 20 user_id, SUBSTRING(created_at, 1, 10)
|user_id|11/1|11/2|11/3|
|:--|:--:|--:|
|10|true|false|false|
|10|false|true|false|
|10|false|false|false|
|20|true|false|false|
|20|false|false|false|
|20|false|false|false|
GROUP BYを投稿ユーザーのみにしてしまうと、下記のようなエラーメッセージが出てしまい、ここからどのようにクエリを書き換えれば良いか困っています。実行エンジンはprestoです。
ご教示のほど、何卒よろしくお願いいたします!mm
'created_at' must be an aggregate expression or appear in GROUP BY clause