COLOR COUNT
RED 1
BLUE 1
を:
USER COLOR ORDER
==================
JOE RED 1
JOE BLUE 2
PHIL BLUE 3
ジョーは最初の赤を選んだが、その後、彼の好きな色として青を選んだが...あなたは返すクエリを書くにはどうすればよいですジョーの最初の投票のみがカウントされた場所は?
COLOR COUNT
RED 1
BLUE 1
を:
USER COLOR ORDER
==================
JOE RED 1
JOE BLUE 2
PHIL BLUE 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
最も難しい部分は、テーブル内の列のほとんどは、キーワードを予約されているということでした...
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
これは基本的に、私は同様に、追加の説明を提供する私の答え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;
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および以下で
:
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
あなたの答えとGuffaのは同じでした。彼は2分であなたを倒したので、私は彼にそれを与えた。 – ConsultUtah