0

我有一张有两列的“爱好”表。它看起来像这样:

NAME   | HOBBY
Alice  | sport
Bob    | painting
...    | ...
Yves   | programming
Zooey  | theatre

行可以重复。例如,爱好“绘画”的“鲍勃”可以出现两次、三次甚至更多次。我想找到那些有不止一种爱好的人。我尝试使用这样的查询:

select NAME, HOBBY
from Hobbys
group by NAME, HOBBY
order by 1, 2

但我不知道如何使用查询结果按名称进行第二次分组。

4

3 回答 3

3

要查找具有多个爱好的用户,只需按名称分组并计算不同的爱好即可;

SELECT name 
FROM hobbies
GROUP BY name
HAVING COUNT(DISTINCT hobby)>1

一个用于测试的 SQLfiddle

如果你想要用户他们的爱好,你可以使用 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

另一个 SQLfiddle

于 2013-05-24T12:51:15.803 回答
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
)
于 2013-05-24T12:52:52.753 回答
0

尝试这个..

SELECT NAME,HOBBY
FROM Hobbys
GROUP BY NAME
HAVING COUNT(HOBBY) > 1
于 2013-05-24T12:50:54.123 回答