0

2 つの列を持つテーブル「趣味」があります。次のようになります。

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

行が重複する可能性があります。たとえば、趣味が「絵を描く」という「ボブ」は、2 回、3 回、またはそれ以上の頻度で現れることがあります。複数の趣味を持っている人を見つけたいです。私はこのようなクエリを使用しようとしました:

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

しかし、クエリ結果を NAME による 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 に答える