2011-07-12 8 views
1

SQL好きな色クイズ

COLOR COUNT 
RED 1 
BLUE 1 

を:

USER COLOR ORDER 
================== 
JOE RED 1 
JOE BLUE 2 
PHIL BLUE 3 

ジョーは最初の赤を選んだが、その後、彼の好きな色として青を選んだが...あなたは返すクエリを書くにはどうすればよいですジョーの最初の投票のみがカウントされた場所は?

答えて

3

あなたはそれらをカウントする色でグループ、その後、各ユーザーの最安ORDER値を取得し、その後、それらのレコードの色を取得するために、再びテーブルに対してというの参加になります。

select y.COLOR, count(*) as COUNT 
from (select USER, min(ORDER) as ORDER from TheTable group by USER) x 
inner join TheTable y on x.USER = y.USER and x.ORDER = y.ORDER 
group by COLOR 
1

最も難しい部分は、テーブル内の列のほとんどは、キーワードを予約されているということでした...

CREATE TABLE #Votes (
    [USER] VARCHAR(50), 
    COLOR VARCHAR(50), 
    [ORDER] INT 
) 

INSERT INTO #Votes ([USER], COLOR, [ORDER]) VALUES ('JOE', 'RED', 1) 
INSERT INTO #Votes ([USER], COLOR, [ORDER]) VALUES ('JOE', 'BLUE', 2) 
INSERT INTO #Votes ([USER], COLOR, [ORDER]) VALUES ('PHIL', 'BLUE', 2) 

;WITH NumberedVotes AS (
    SELECT 
     [USER], 
     COLOR, 
     ROW_NUMBER() OVER (PARTITION BY [USER] ORDER BY [ORDER]) AS RowNumber 
    FROM #Votes 
) 
SELECT 
    COLOR, 
    COUNT(*) AS [COUNT] 
FROM NumberedVotes 
WHERE RowNumber = 1 
GROUP BY COLOR 
ORDER BY [COUNT] DESC 
3

これは基本的に、私は同様に、追加の説明を提供する私の答えhere、同じです。

SELECT color,count(*) AS count 
FROM votes AS v 
JOIN (
    SELECT user,MIN(order) AS order 
    FROM votes 
    GROUP BY user 
) AS v2 ON (v.user=v2.user AND v.order=v2.order) 
GROUP BY color; 
+0

あなたの答えとGuffaのは同じでした。彼は2分であなたを倒したので、私は彼にそれを与えた。 – ConsultUtah

0
declare @tb table ([user] varchar(10), color varchar(10), [order] int identity (1,1)) 

insert @tb ([user],color) 
select 'JOE' [user], 'RED' color 
union all 
select 'JOE' [user], 'BLUE' color 
union all 
select 'PHIL' [user], 'BLUE' color 


select color, count(user) from 
(
select distinct p.color,t.[user] from @tb t 
     cross apply (select top 1 color from @tb e where e.[user] = t.[user] order by [order]) p 
) u 
group by color 
TSQLバージョン2005および以下で
1

SELECT color, COUNT(color) AS VOTES FROM 
(SELECT *, ROW_NUMBER() OVER (PARTITION BY [user] ORDER BY [order]) AS Row FROM @votes) T 
WHERE T.Row = 1 GROUP BY color 
関連する問題