回答編集履歴

2

update

2020/02/07 09:03

投稿

yodel
yodel

スコア508

test CHANGED
@@ -1,6 +1,22 @@
1
+ 質問の回答としては、動作することも可能だが、
2
+
1
- `group by` は、同項目を集約してカウントや合算する時に使います
3
+ い文法としはすべてのラムを明記するべき
4
+
5
+ という回答となります。
2
6
 
3
7
 
8
+
9
+ 例えば、MYSQLには`ONLY_FULL_GROUP_BY`というオプションがあり、
10
+
11
+ そのオプションを有効にするとGROUP化するカラムすべて明記しないとエラーになります。
12
+
13
+ [https://dev.mysql.com/doc/refman/5.6/ja/sql-mode.html](https://dev.mysql.com/doc/refman/5.6/ja/sql-mode.html)
14
+
15
+
16
+
17
+ ---
18
+
19
+ `group by` は、同項目を集約してカウントや合算する時に使います。
4
20
 
5
21
  通常、ユーザIDはユニークになるはずなので、
6
22
 
@@ -8,13 +24,17 @@
8
24
 
9
25
 
10
26
 
11
- ---- 追記
27
+ ---
28
+
29
+ 追記
12
30
 
13
31
  ちょっとテーブル構造把握しきれていないので申し訳ないですが、
14
32
 
15
33
  sales_recordsに同じユーザの購入履歴が複数あって、重複を除外したい場合だと理解しました。
16
34
 
17
- GROUP BYでも集約出来るかもしれせんが、DISTINCTを利用してソートはorder by でやるべきだと感じした
35
+ GROUP BYでも集約出来まが、個人的には、集約関係無い場合はDISTINCTを利用しま
36
+
37
+ ソートはorder by でやるべき。
18
38
 
19
39
 
20
40
 

1

追記

2020/02/07 09:03

投稿

yodel
yodel

スコア508

test CHANGED
@@ -5,3 +5,33 @@
5
5
  通常、ユーザIDはユニークになるはずなので、
6
6
 
7
7
  GROUP BY users.id; の1行自体が不要(意味が無い)では?
8
+
9
+
10
+
11
+ ---- 追記
12
+
13
+ ちょっとテーブル構造把握しきれていないので申し訳ないですが、
14
+
15
+ sales_recordsに同じユーザの購入履歴が複数あって、重複を除外したい場合だと理解しました。
16
+
17
+ GROUP BYでも集約出来るかもしれませんが、DISTINCTを利用してソートはorder by でやるべきだと感じました。
18
+
19
+
20
+
21
+ ```SQL
22
+
23
+ DISTINCT SELECT
24
+
25
+ users.id,
26
+
27
+ users.name
28
+
29
+ FROM sales_records
30
+
31
+ JOIN users ON sales_records.user_id = users.id
32
+
33
+ WHERE sales_records.item_id = (SELECT id FROM items WHERE name = "サンダル")
34
+
35
+ ORDER BY users.id;
36
+
37
+ ```