选择并计算非唯一列的属性

问题描述 投票:0回答:3

我有一张人和活动表 - 两列都不是唯一的。我需要根据不同活动的数量对每个用户进行排名,例如:

_________________ 
|PERSON|ACTIVITY|
-----------------
|Lars  | Sleep  |
|James | Eat    |
|Lars  | Sleep  | 
|Lars  | Sleep  | 
|Kirk  | Shred  |
|James | Shred  |
-----------------

Lars出现三次,但重复执行相同的活动。柯克出现过一次,所以他在活动数量方面与拉尔斯相同。詹姆斯执行两项不同的活动,所以他应该排名最高。

预期产量:

James - 2
Kirk - 1 
Lars - 1

(相同计数的排序无关紧要)

我提出的解决方案涉及将DISTINCT应用于person列并迭代名称,为每个名称选择活动并应用DISTINCT后跟COUNT。感觉必须有更好的方式。

sql sql-server
3个回答
2
投票

我想你只想要count(distinct)

select person, count(distinct activity) as num_activities
from t
group by person
order by num_activities desc;

0
投票
SELECT Person, COUNT(DISTINCT Activity) AS ActivityCount
FROM MyTable
GROUP BY Person
ORDER BY 2 DESC

0
投票

您可以使用GROUP BY功能。 SELECT PERSON,COUNT(DISTINCT ACTIVITY)从您的表组中按计数顺序计数;

© www.soinside.com 2019 - 2024. All rights reserved.