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

質問編集履歴

11

修正

2021/05/26 05:05

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  # 質問
2
- りんご2個以上バナナ2個以上を持っているユーザIDを取得したいです。
2
+ りんご2個以上」かつ「バナナ2個以上を持っているユーザIDを取得したいです。
3
3
 
4
4
  以下データの場合、結果としてuser_id=2が得られることを期待していますが思ったような結果が得られません。
5
5
  (期待する結果を得られるSQLは完成しましたが効率が悪いように思います。改善点や最適な方法が知りたいです。)

10

修正

2021/05/26 05:05

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -74,7 +74,7 @@
74
74
  今回のようなケースではどのようなSQLが最適でしょうか?
75
75
 
76
76
  ※追記
77
- 以下SQL004でも期待する結果が取れて少しSQLが綺麗になったかと思いましたがりんごが1個、バナナが3個(またはそれ以外の4個以上のパターン)でも結果が0件にならないのでダメでした。
77
+ 以下SQL004でも期待する結果が取れて少しSQLが綺麗になったかと思いましたがりんごが1個、バナナが3個(またはそれ以外の合計が4個以上のパターン)でも結果が0件にならないのでダメでした。
78
78
  ```
79
79
  /* SQL004 */
80
80
  select

9

修正

2021/05/25 20:31

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  # 質問
2
- りんご2個、バナナ2個を持っているユーザIDを取得したいです。
2
+ りんご2個以上、バナナ2個以上を持っているユーザIDを取得したいです。
3
3
 
4
4
  以下データの場合、結果としてuser_id=2が得られることを期待していますが思ったような結果が得られません。
5
5
  (期待する結果を得られるSQLは完成しましたが効率が悪いように思います。改善点や最適な方法が知りたいです。)
@@ -31,7 +31,7 @@
31
31
 
32
32
  # 試したこと
33
33
  以下SQL001は結果が0件です。
34
- りんごが2個のwhere条件で既に結果にバナナが含まれていない為、2つめのバナナに関するwhere条件を満たせず0件になったと思われます。
34
+ りんごが2個以上のwhere条件で既に結果にバナナが含まれていない為、2つめのバナナに関するwhere条件を満たせず0件になったと思われます。
35
35
 
36
36
  ```sql
37
37
  /* SQL001 */
@@ -74,7 +74,7 @@
74
74
  今回のようなケースではどのようなSQLが最適でしょうか?
75
75
 
76
76
  ※追記
77
- 以下SQL004でも期待する結果が取れて少しSQLが綺麗になったかと思いましたがりんごが1個、バナナが3個でも結果が0件にならないのでダメでした。
77
+ 以下SQL004でも期待する結果が取れて少しSQLが綺麗になったかと思いましたがりんごが1個、バナナが3個(またはそれ以外の4個以上のパターン)でも結果が0件にならないのでダメでした。
78
78
  ```
79
79
  /* SQL004 */
80
80
  select
@@ -85,7 +85,7 @@
85
85
  group by
86
86
  i.user_id
87
87
  having
88
- sum(i.num) = 4
88
+ sum(i.num) >= 4
89
89
  ```
90
90
 
91
91
  # 環境

8

修正

2021/05/25 20:29

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -74,7 +74,7 @@
74
74
  今回のようなケースではどのようなSQLが最適でしょうか?
75
75
 
76
76
  ※追記
77
- 以下SQL004でも期待する結果が取れて少しSQLがきれいになったかと思いましたがりんごが1個、バナナが3個でも一致してした。
77
+ 以下SQL004でも期待する結果が取れて少しSQLが綺麗になったかと思いましたがりんごが1個、バナナが3個でも結果が0件にならなのでダメでした。
78
78
  ```
79
79
  /* SQL004 */
80
80
  select

7

追記

2021/05/25 20:20

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -73,5 +73,20 @@
73
73
 
74
74
  今回のようなケースではどのようなSQLが最適でしょうか?
75
75
 
76
+ ※追記
77
+ 以下SQL004でも期待する結果が取れて少しSQLがきれいになったかと思いましたがりんごが1個、バナナが3個でも一致していました。
78
+ ```
79
+ /* SQL004 */
80
+ select
81
+ i.user_id
82
+ from items i
83
+ where
84
+ (i.name = 'りんご') or (i.name = 'バナナ')
85
+ group by
86
+ i.user_id
87
+ having
88
+ sum(i.num) = 4
89
+ ```
90
+
76
91
  # 環境
77
92
  - MariaDB 10.5.9

6

修正

2021/05/25 20:18

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,7 @@
12
12
  `user_id` INT(11) UNSIGNED NOT NULL,
13
13
  `name` VARCHAR(16) NOT NULL COLLATE 'utf8_general_ci',
14
14
  `num` INT(11) UNSIGNED NOT NULL,
15
- INDEX `user_id` (`name`) USING BTREE
15
+ INDEX `name` (`name`) USING BTREE
16
16
  )
17
17
  COLLATE='utf8_general_ci'
18
18
  ENGINE=InnoDB

5

修正

2021/05/25 20:10

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,7 @@
12
12
  `user_id` INT(11) UNSIGNED NOT NULL,
13
13
  `name` VARCHAR(16) NOT NULL COLLATE 'utf8_general_ci',
14
14
  `num` INT(11) UNSIGNED NOT NULL,
15
- INDEX `card_id` (`name`) USING BTREE
15
+ INDEX `user_id` (`name`) USING BTREE
16
16
  )
17
17
  COLLATE='utf8_general_ci'
18
18
  ENGINE=InnoDB

4

タグ追加

2021/05/25 20:09

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
File without changes

3

修正

2021/05/25 20:08

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -36,7 +36,7 @@
36
36
  ```sql
37
37
  /* SQL001 */
38
38
  select
39
- *
39
+ i.user_id
40
40
  from items i
41
41
  where
42
42
  (i.name = 'りんご' and i.num >= 2) and
@@ -48,7 +48,7 @@
48
48
  ```sql
49
49
  /* SQL002 */
50
50
  select
51
- *
51
+ i.user_id
52
52
  from items i
53
53
  where
54
54
  (i.name = 'りんご' and i.num >= 2) and
@@ -64,7 +64,7 @@
64
64
  ```sql
65
65
  /* SQL003 */
66
66
  select
67
- *
67
+ i.user_id
68
68
  from items i
69
69
  where
70
70
  (i.name = 'りんご' and i.num >= 2) and

2

環境追記

2021/05/25 20:07

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -71,4 +71,7 @@
71
71
  i.user_id in (select user_id from items where (name = 'バナナ' and num >= 2))
72
72
  ```
73
73
 
74
- 今回のようなケースではどのようなSQLが最適でしょうか?
74
+ 今回のようなケースではどのようなSQLが最適でしょうか?
75
+
76
+ # 環境
77
+ - MariaDB 10.5.9

1

修正

2021/05/25 20:06

投稿

daiki002
daiki002

スコア68

title CHANGED
File without changes
body CHANGED
@@ -31,7 +31,7 @@
31
31
 
32
32
  # 試したこと
33
33
  以下SQL001は結果が0件です。
34
- りんごが2のwhere条件で既に結果にバナナが含まれていない為、2つめのwhere条件を満たせず0件になったと思われます。
34
+ りんごが2のwhere条件で既に結果にバナナが含まれていない為、2つめのバナナに関するwhere条件を満たせず0件になったと思われます。
35
35
 
36
36
  ```sql
37
37
  /* SQL001 */