「達人に学ぶSQL徹底指南書」(著者:ミック、発行:翔泳社)の
第1部、1-10 帰ってきたHAVING句 「集合にきめ細やかな条件を設定する」の内容でつまずいています。
テーブル名:TestResults
列はstudent_id|class|sex|scoreの4列で15行
student_id|class|sex|score
001 A 男 100
002 A 女 100
003 A 女 49
004 A 男 30
005 B 女 100
006 B 男 92
007 B 男 80
008 B 男 80
009 B 女 10
010 C 男 92
011 C 男 80
012 C 女 21
013 D 女 100
014 D 女 0
015 D 女 0
SELECT class
FROM TestResults
GROUP BY class
HAVING AVG(CASE WHEN sex = '男'
THEN score
ELSE 0 END)
< AVG(CASE WHEN sex = '女'
THEN score
ELSE 0 END);
実行結果
class
A
D
上記のsqlのHAVING句の部分で、
例えばclassがAの行の処理でなぜ男子の平均が(100+30+0+0)/4=32.5ではなく(100+30)/2=65になるのか?
また、女子の平均が(100+49+0+0)/4=37.25ではなく
(100+49)/2=74.5になるのか?
「達人に学ぶSQL徹底指南書」を読んだことのある方がいたら
お手数ですが回答をお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。