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

回答編集履歴

2

update

2020/02/07 09:03

投稿

yodel
yodel

スコア508

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

1

追記

2020/02/07 09:03

投稿

yodel
yodel

スコア508

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