回答編集履歴

3

追記

2018/06/10 06:37

投稿

sazi
sazi

スコア25206

test CHANGED
@@ -80,6 +80,8 @@
80
80
 
81
81
  条件の要素を昇順で指定する前提であれば、group_concat()を使用して簡潔に記述することもできます。
82
82
 
83
+ 最初のSQLとは基にする集合をどうするかという点が異なります。
84
+
83
85
  ```SQL
84
86
 
85
87
  select *

2

追記

2018/06/10 06:37

投稿

sazi
sazi

スコア25206

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

1

追記

2018/06/10 06:35

投稿

sazi
sazi

スコア25206

test CHANGED
@@ -69,3 +69,33 @@
69
69
  limit 2
70
70
 
71
71
  ```
72
+
73
+ 追記
74
+
75
+ --
76
+
77
+ 条件の要素を昇順で指定する前提であれば、group_concat()を使用して簡潔に記述することもできます。
78
+
79
+ ```SQL
80
+
81
+ select *
82
+
83
+ from (
84
+
85
+ select user_id, count(distinct value) as value_count
86
+
87
+ , group_concat(distinct value order by value) as value_list
88
+
89
+ from favo
90
+
91
+ group by user_id
92
+
93
+ ) agg
94
+
95
+ where value_list in ('オレンジ,パイナップル,バナナ,リンゴ','オレンジ,バナナ,リンゴ')
96
+
97
+ order by value_count desc, user_id
98
+
99
+ limit 2
100
+
101
+ ```