MS SQL双组由

时间:2013-05-24 12:45:29

标签: sql-server-2008 group-by

我有一张带有两列的'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进行第二次分组的查询结果。

3 个答案:

答案 0 :(得分:3)

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

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

An SQLfiddle to test with

如果您希望用户他们的爱好,您可以使用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

Another SQLfiddle

答案 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