我是sql的新手,并且玩了一些我发现的示例数据库.我有一张叫做学生的桌子如下
id name expenditure item
1 dan 45 social
1 dan 60 books
2 sarah 32 food
3 matt 64 food
3 matt 71 social
Run Code Online (Sandbox Code Playgroud)
我试图找到在食物和社交上花钱的学生,但在社交上花的钱多于食物.
我试过了:
Select name
from student
where item = 'social' and item = 'food'
Run Code Online (Sandbox Code Playgroud)
没有单独的数据行具有item = 'social'AND item = 'food'.由于该WHERE条款一次适用于一行数据,因此您无法做到这一点.
您需要做的是按学生将所有记录组合在一起,然后检查该组中数据的某些特征.
SELECT
id,
name
FROM
student
GROUP BY
id,
name
HAVING
SUM(CASE WHEN item = 'social' THEN 1 ELSE 0 END) > 0
AND SUM(CASE WHEN item = 'food' THEN 1 ELSE 0 END) > 0
Run Code Online (Sandbox Code Playgroud)
这给了谁拥有所有学生一些用于记录'social'和一些记录'food'.
然后,您可以添加以下内容以仅获得花费更多'social'而非花费更多的人'food'.
AND SUM(CASE WHEN item = 'social' THEN expenditure ELSE 0 END)
>
SUM(CASE WHEN item = 'food' THEN expenditure ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |