質問編集履歴

1

曖昧な情報が多かったため修正を加えました

2020/10/25 09:44

投稿

Tamusu
Tamusu

スコア8

test CHANGED
File without changes
test CHANGED
@@ -12,29 +12,21 @@
12
12
 
13
13
 
14
14
 
15
- tableには以下のようにデータが格納されています
15
+ drinks というテーブルには以下のようにデータが格納されています
16
16
 
17
17
 
18
18
 
19
19
  ```table
20
20
 
21
- store_code|name
21
+ id|name|
22
22
 
23
- a |ミックスジュース
23
+ 1|ミックスジュース|
24
24
 
25
- a |お茶
25
+ 2|トマトジュース|
26
26
 
27
- a |コーラ
27
+ 3|お茶|
28
28
 
29
- a |C・Cレモン
30
-
31
- b |ミックスジュース
32
-
33
- b |午後の紅茶
34
-
35
- b |
29
+ 4||
36
-
37
- .
38
30
 
39
31
  .
40
32
 
@@ -44,7 +36,61 @@
44
36
 
45
37
 
46
38
 
47
- これをselect * from table;で取得しする以下のようなhash値を取得できます。
39
+ drink_prices というテーブルには以下のようなデータが格納されています。
40
+
41
+ 同じstore_code 内で drink_id が同じで、 drink_price だけが違うものがあります。
42
+
43
+ これは、同じミックスジュースでもサイズが違うなどの理由で同じ drink_id の drink_price だけ違う物がデータとして入っています。
44
+
45
+
46
+
47
+ ```table
48
+
49
+ id|store_code|drink_id|drink_price
50
+
51
+ 1 |a |1 |520
52
+
53
+ 2 |a |1 |550
54
+
55
+ 3 |a |2 |500
56
+
57
+ 4 |a |3 |480
58
+
59
+ 5 |a |4 |500
60
+
61
+ 6 |b |1 |550
62
+
63
+ 7 |b |2 |500
64
+
65
+ 8 |b |3 |500
66
+
67
+ .
68
+
69
+ .
70
+
71
+ ```
72
+
73
+
74
+
75
+ drinks と drink_prices テーブルを内部結合し、必要なデータのみ抽出します。
76
+
77
+
78
+
79
+ ```sql
80
+
81
+ select store_code, name from drink_prices INNER JOIN drinks ON drink_prices.drink_id = drinks.id where drink_prices.id in(select min(drink_prices.id) from drink_prices INNER JOIN drinks ON drink_prices.drink_id = drinks.id group by store_code, drinks.name);
82
+
83
+ ```
84
+
85
+
86
+
87
+ 上記のSQL文を挟む理由としては、 drink_prices テーブルには同じ名前の値段だけ違う値が入っています。
88
+
89
+ drinks の name を表示するにあたって、同じ名前を2度出力することを避けるために、一度 1d が若い方を省いて取得しています。
90
+
91
+
92
+
93
+ 上記のsql文で取得できたデータは以下のようなものになります。
48
94
 
49
95
 
50
96
 
@@ -54,15 +100,15 @@
54
100
 
55
101
  {"store_code"=>"a", "name"=>"ミックスジュース"},
56
102
 
57
- {"store_code"=>"a", "name"=>"お茶"},
103
+ {"store_code"=>"a", "name"=>"トマトジュース"},
58
104
 
59
- {"store_code"=>"a", "name"=>"コーラ"},
105
+ {"store_code"=>"a", "name"=>"お茶"},
60
106
 
61
- {"store_code"=>"a", "name"=>"C・Cレモン"},
107
+ {"store_code"=>"a", "name"=>"麦茶"},
62
108
 
63
109
  {"store_code"=>"b", "name"=>"ミックスジュース"},
64
110
 
65
- {"store_code"=>"b", "name"=>"午後の紅茶"},
111
+ {"store_code"=>"b", "name"=>"トマトジュース"},
66
112
 
67
113
  {"store_code"=>"b", "name"=>"お茶"},
68
114
 
@@ -90,9 +136,9 @@
90
136
 
91
137
  [
92
138
 
93
- {"store_code"=>"a", "name"=>["ミックスジュース", "お茶", "コーラ", "C・Cレモン"]},
139
+ {"store_code"=>"a", "name"=>["ミックスジュース", "トマトジュース", "お茶", "麦茶"]},
94
140
 
95
- {"store_code"=>"b", "name"=>["ミックスジュース", "午後の紅茶", "お茶"]},
141
+ {"store_code"=>"b", "name"=>["ミックスジュース", "トマトジュース", "お茶"]},
96
142
 
97
143
  .
98
144