質問するログイン新規登録

回答編集履歴

3

追記

2018/06/10 06:37

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -39,6 +39,7 @@
39
39
  追記
40
40
  --
41
41
  条件の要素を昇順で指定する前提であれば、group_concat()を使用して簡潔に記述することもできます。
42
+ 最初のSQLとは基にする集合をどうするかという点が異なります。
42
43
  ```SQL
43
44
  select *
44
45
  from (

2

追記

2018/06/10 06:37

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,4 +1,6 @@
1
- 条件をSQLを構成する際順番に並べ替えしました。
1
+ 条件をSQLを構成する際に考慮していく順番に並べ替えしました。
2
+ 先ずは、取得するデータの集合を考え、それらを絞り込んだり結合したり加工するという風に考えると、
3
+ 混乱せずにすむのではないかと思います。
2
4
  > 3.リンゴ、バナナ、オレンジ、パイナップルの全てが登録されているuser_idを取得
3
5
  > 4.―1リンゴ、バナナ、オレンジの3つが登録されているuser_idを取得する
4
6
  > 4.―2(3.)の条件を満たすデータが無い場合、(4.―1)の条件を満たすuser_idを取得する

1

追記

2018/06/10 06:35

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -33,4 +33,19 @@
33
33
  order by coalesce(count4.value_count,count3.value_count) desc
34
34
  , base.user_id
35
35
  limit 2
36
+ ```
37
+ 追記
38
+ --
39
+ 条件の要素を昇順で指定する前提であれば、group_concat()を使用して簡潔に記述することもできます。
40
+ ```SQL
41
+ select *
42
+ from (
43
+ select user_id, count(distinct value) as value_count
44
+ , group_concat(distinct value order by value) as value_list
45
+ from favo
46
+ group by user_id
47
+ ) agg
48
+ where value_list in ('オレンジ,パイナップル,バナナ,リンゴ','オレンジ,バナナ,リンゴ')
49
+ order by value_count desc, user_id
50
+ limit 2
36
51
  ```