Sql 列出得分从未超过3分的人的姓名
从这样的表格中:Sql 列出得分从未超过3分的人的姓名,sql,Sql,从这样的表格中: Name | Score ------ | ------ Bill | 1 Bill | 2 Bill | 1 Steve | 1 Steve | 4 Steve | 1 返回得分从未超过3的人的姓名 答案是: Name | ------ | Bill | SELECT DISTINCT name FROM mytable WHERE Name NOT IN ( SELECT Name
Name | Score
------ | ------
Bill | 1
Bill | 2
Bill | 1
Steve | 1
Steve | 4
Steve | 1
返回得分从未超过3的人的姓名
答案是:
Name |
------ |
Bill |
SELECT DISTINCT name
FROM mytable
WHERE Name NOT IN
( SELECT Name
FROM mytable
WHERE score > 3
)
一种解决办法是:
Name |
------ |
Bill |
SELECT DISTINCT name
FROM mytable
WHERE Name NOT IN
( SELECT Name
FROM mytable
WHERE score > 3
)
样本表:
脚本:
结果:
关键是获得每个人的最高分数,然后过滤到最高分数低于3的人。要获得最大值,您需要按和最大值进行聚合分组。然后,要对聚合应用筛选器,您必须使用have而不是WHERE。所以你最终会得到:
SELECT Name, MAX(Score) AS HighScore
FROM Table
GROUP BY Name
HAVING MAX(Score) <= 3;
@DanieleO您的基本sql查询有一个主要问题。@scott查看一下您使用的已发布查询?博士后?Oracle?这个解决方案似乎有点过火了,不是吗?很多方面每个人都有自己的想法。堆栈溢出就是这个问题的名称不同的解决方案@EstebanP。提问者会有很多选择。对不起,听起来这个解决方案不应该是错的。我只是想哇,那就像拿着大锤去敲坚果-
NAME Score
Bill 1
Bill 2
Bill 1
SELECT Name, MAX(Score) AS HighScore
FROM Table
GROUP BY Name
HAVING MAX(Score) <= 3;