sql query-rank只显示所有记录的1个列

41ik7eoe  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(462)

我试图执行一些已经存在的列计算的基础上排名。我尝试使用sqlrank()函数,但是它显示所有条目的结果为1,即使orderby(score列)的值不同。详情如下:
QUU点和TIU点是计算列
分数列也是一个派生列,但是,它只是第1点中提到的两列的总和。
我使用的sql查询如下:

use EFR_DB
GO

select d.serial, d.question_set_id, d.correct_answers, d.total_questions, d.time_taken_seconds, q.total_time_in_secs,
(cast(d.correct_answers as float)/d.total_questions) as qu_point, ((q.total_time_in_secs-d.time_taken_seconds)/q.total_time_in_secs) as ti_point,
(((cast(d.correct_answers as float)/d.total_questions)*2) + ((q.total_time_in_secs-d.time_taken_seconds)/q.total_time_in_secs)) as score,

rank() over (partition by d.question_set_id order by score)

from daily_quiz_record d join Question_set q 
on q.question_set_id=d.question_set_id

请帮助我如何做耙这是分区的问题集\u id和排名的基础上的分数。
附上截图供您参考。在此处输入图像描述

slsn1g29

slsn1g291#

不能使用中定义的别名 select 同一条款中的条款。我想您的一个表中有一列名为 score ,否则查询将出错-因此此现有列将用于排序,而不是用于计算值。
由于表达式很长,因此将查询转换为子查询并在外部查询中排序更简单:

select 
    t.*,
    rank() over(partition by question_set_id order by score) rn
from (
    -- your existing query (without rank)
) t

相关问题