sql基本查询
我是sql新手,正在玩弄我找到的一些示例数据库。 我有一张名为student的桌子,如下所示sql基本查询,sql,Sql,我是sql新手,正在玩弄我找到的一些示例数据库。 我有一张名为student的桌子,如下所示 我试图找到那些在食物和社交上都花钱但在社交上花的钱比食物多的学生 我试过: Select name from student where item = 'social' and item = 'food' 没有一行数据包含item='social'和item='food'。由于WHERE子句一次应用于一行数据,因此不能这样做 您需要做的是将所有记录按学生分组,然后检查该组中数据的某些特征 SEL
我试图找到那些在食物和社交上都花钱但在社交上花的钱比食物多的学生 我试过:
Select name
from student
where item = 'social' and item = 'food'
没有一行数据包含
item='social'
和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
这就给了所有学生一些关于社交的记录和一些关于食物的记录
AND SUM(CASE WHEN item = 'social' THEN expenditure ELSE 0 END)
>
SUM(CASE WHEN item = 'food' THEN expenditure ELSE 0 END)
然后,您可以添加以下内容,以仅获取那些在'social'
上花费比在'food'
上花费更多的人
AND SUM(CASE WHEN item = 'social' THEN expenditure ELSE 0 END)
>
SUM(CASE WHEN item = 'food' THEN expenditure ELSE 0 END)
其中item='social'和item='food'
不起作用,因为一行永远不能同时是这两行。比较同一表中的两行时,最简单的方法是进行自联接
SELECT
s1.Name
FROM student s1
INNER JOIN student s2
ON s1.id = s2.id
WHERE
s1.item = 'social' and s2.item = 'food'
and
s1.expenditure > s2.expenditure
注:
LEFT JOIN student s2
ON s1.id = s2.id
and s2.item = 'food'