如何基于多列进行排名

时间:2019-08-12 10:13:20

标签: sql ms-access

我正在尝试根据Microsoft Access中某个特定类别的人数为他们评分。

一个人可能对他们有7种可能的类别,我想给每个人分配1到7的分数,其中1分被指定为最高得分类别,而7分则是最低分数。他们可能没有针对每个类别的答案,在这种情况下,可以忽略该类别。

目标是获得如下图所示的输出结果:

enter image description here

我尝试了几种不同的方法,包括分区和联接,但是都没有用。老实说,我认为我所尝试的查询远远超出了预期。我试图从头开始用SQL编写代码,并使用查询生成器。

我们非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

由于您的电子邮件可能具有重复的计数,因此您需要两个子查询

SELECT 
    Score.email, 
    Score.category, 
    Score.[Count], 
        (Select Count(*) From Score As T Where 
            T.email = Score.email And 
            T.[Count] >= Score.[Count])-
        (Select Count(*) From Score As S Where 
            S.email = Score.email And 
            S.[Count] = Score.[Count] And 
            S.category > Score.category) AS Rank
FROM 
    Score
ORDER BY 
    Score.email, 
    Score.[Count] DESC, 
    Score.category;

Output

答案 1 :(得分:0)

对于相同 Count值为等于 email的类别,以下内容将记录按字母顺序降序Category名称(因为这是您的示例中显示的名称):

select t.email, t.category, t.count,
(
    select count(*) from YourTable u
    where t.email = u.email and 
    ((t.count = u.count and t.category <= u.category) or t.count < u.count)
) as rank
from YourTable t
order by t.email, t.count desc, t.category desc

YourTable的两个引用都更改为表的名称。