我正在尝试查询设置结果集,返回如下所示的内容。 我需要每个名称只返回1行,并且需要GROUP BY,但只需要在Grade列下具有值'8'的名称。以下是另一个查询的结果。由于Sandra的值不同于8,因此应省略Sandra。
例如: - 在下面我只需为约翰获得一行。 请指教。谢谢。
Name Grade
======= =====
Sandra 8
Sandra 8
Sandra 8
Sandra 9
John 8
John 8
John 8
John 8
Expected Result - 1 row
Name Grade
John 8
答案 0 :(得分:3)
在名称上聚合表格,然后使用HAVING
子句筛选出等级不是8的名称(或您不想要的任何其他值)。
SELECT name, MIN(grade) AS grade
FROM yourTable
GROUP BY name
HAVING SUM(CASE WHEN grade <> 8 THEN 1 ELSE 0 END) = 0;
<强>更新强>
如果grade
列是文本,并且您希望与字符串'8'
而不是数字进行比较,那么您可以使用此HAVING
子句:
HAVING SUM(CASE WHEN grade <> '8' THEN 1 ELSE 0 END) = 0;
答案 1 :(得分:0)
如果你想要的名字只有8,你可以这样做:
select name
from t
group by name
having min(grade) = max(grade) and min(grade) = 8;
答案 2 :(得分:0)
或者,
SELECT DISTINCT B.name, B.grade
FROM
(
SELECT name FROM yourTable GROUP BY name HAVING COUNT(DISTINCT grade) = 1
) Z
INNER JOIN
yourTable B
ON Z.name = B.name
AND B.grade = 8;