@yan-san

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SQLのwhereについての考え方

解決したいこと

ProgateにてSQLを勉強中です。
答えをみても、どうしてもsales_recordsからデータを取ってきてitemsとくっつける、という部分が理解できません。gender, SUM(price)はitemsにあるデータなのでわざわざwhere sales_recordsになるのが理解できません。
教えていただけますとさいわいです。

問題

男性向け商品、女性向け商品、男女兼用商品それぞれの
・性別(0・1・2の数字)
・売上額
を取得してください。
また、「売上額」には
売上額
と名前を付けてください。

自分が書いたコード

select gender, SUM(price) AS "売上額"
from items
group by gender;

答えのコード

SELECT items.gender, SUM(items.price) AS "売上額"
FROM sales_records
JOIN items
ON sales_records.item_id = items.id
GROUP BY items.gender;

データベース

items

id	name	gender	price	cost
1	スカート	1	4000	800
2	デニムパンツ	0	6500	2900
3	デニムパンツ	1	6000	2600
4	キャップ	2	1500	300
5	ブラウス	1	8000	2000
6	靴下	2	1000	250
7	カットソー	1	3400	200
8	ショートパンツ	1	3200	1100
9	ショートパンツ	0	2200	900
10	紺Tシャツ	2	2000	900
11	白Tシャツ	2	2000	800
12	黒Tシャツ	2	2300	800
13	グレーTシャツ	2	2300	1000
14	青スニーカー	2	3000	1400
15	赤スニーカー	2	4200	1600
16	白スニーカー	2	4000	1600

sales_records

id	user_id	item_id	purchased_at
1	204	28	2017-07-01
2	99	8	2017-07-01
3	97	17	2017-07-01
4	223	22	2017-07-01
5	130	19	2017-07-01
6	259	12	2017-07-01
7	266	15	2017-07-01
8	91	29	2017-07-01
9	166	9	2017-07-01
10	271	9	2017-07-01
11	159	3	2017-07-01
12	120	17	2017-07-01
13	143	17	2017-07-01
14	162	15	2017-07-01
15	206	24	2017-07-01
16	186	15	2017-07-01
17	38	3	2017-07-02
18	213	15	2017-07-02

users

id	name	gender	age
1	Giana	1	17
2	Diann	1	22
3	Antonella	1	22
4	Jodi	0	29
5	Fredra	1	54
6	Katheryn	1	25
7	Billie	0	21
8	Fawn	1	59
9	Caroline	1	47
10	Nichol	1	26
11	Else	1	25
12	Leigh	1	20
13	Virgie	0	63
14	Lorilee	1	39
15	Dorolisa	1	22
16	Olly	0	36
17	Marcelle	1	16
18	Lisetta	1	27

※データベースは数が多かったので全ては載せていません。

0 likes

2Answer

itemsは「商品情報」ですよね? これらは「単価」です。
一方でsales_recordsは「販売履歴」です。
単価99円の商品Aを10人が買えば、売り上げは990円です。

売った個数の情報はitemsにはありません。
「各商品の売上=各々の商品価格×売った人数」
つまり「items × sales_records」とする必要があります。

where sales_recordsと書かれていますが、whereは「検索条件」です。
今回必要なのはjoin onつまり「結合条件」です。
「商品Aがどれだけ売れたか」を見るにはsales_recordsを結合する必要があります。(あるいはサブクエリなどでカウントすることは可能ですが)

3Like

Comments

  1. @yan-san

    Questioner

    ご回答ありがとうございます!
    そもそものテーブルが何を表しているのか、というところの理解が足りなかったです。わかり易い回答でした、ありがとうございます!

どのような問題文か定かではないですが、
回答からして、

売り上げのっあった商品について性別ごとに合計金額を算出する

なのかなと。

こ仮定の下、「売上 ⊆ 商品」の関係になると思われるため、売上(sales_records)をjoinしないと正しい結果にはならないでしょう

1Like

Comments

  1. @yan-san

    Questioner

    回答ありがとうございます!
    肝心な質問を記載し忘れておりました、、
    ==========
    男性向け商品、女性向け商品、男女兼用商品それぞれの
    ・性別(0・1・2の数字)
    ・売上額
    を取得してください。
    また、「売上額」には
    売上額
    と名前を付けてください。
    ============

Your answer might help someone💌