我有一张带有两列的'Hobbys'表。它看起来像这样:
NAME | HOBBY
Alice | sport
Bob | painting
... | ...
Yves | programming
Zooey | theatre
行可以重复。例如,带有爱好'绘画'的'鲍勃'可以出现两次,三次甚至更多次。 我想找到那些拥有一个以上爱好的人。我尝试使用像这样的查询:
select NAME, HOBBY
from Hobbys
group by NAME, HOBBY
order by 1, 2
但我不知道如何使用NAME进行第二次分组的查询结果。
答案 0 :(得分:3)
要查找具有多个爱好的用户,只需按名称分组并计算不同的爱好;
SELECT name
FROM hobbies
GROUP BY name
HAVING COUNT(DISTINCT hobby)>1
如果您希望用户和他们的爱好,您可以使用CTE;
WITH cte AS (
SELECT name FROM hobbies GROUP BY name HAVING COUNT(DISTINCT hobby)>1
)
SELECT * FROM hobbies JOIN cte ON hobbies.name = cte.name
答案 1 :(得分:1)
我想找到那些有不止一个爱好的人。
在我看来,最简单的方法是使用EXISTS
SELECT NAME,HOBBY FROM dbo.Hobbys h1
WHERE EXISTS
(
SELECT 1 FROM dbo.Hobbys h2
WHERE h1.Name = h2.Name AND h1.HOBBY <> h2.HOBBY
)
答案 2 :(得分:0)
试试这个..
SELECT NAME,HOBBY
FROM Hobbys
GROUP BY NAME
HAVING COUNT(HOBBY) > 1