SQL 查询 - 所有记录的排名仅显示 1 个排名
SQL Query - Rank showing only 1 rank for all records
我正在尝试根据对现有列的一些计算来执行排名。我尝试使用 SQL RANK() 函数,但是即使排序依据(分数列)的值不同,它也会将所有条目的结果显示为 1。详情请见下方:
- qu_point和ti_points是计算列
- score 列也是派生列,但是,只是第 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
请帮助我如何根据question_set_id和ranked进行划分得分.
附上截图供您参考。
enter image description here
您不能在同一子句中使用 select
子句中定义的别名。我想您的 table 中有一个名为 score
的列,否则您的查询会出错 - 因此此现有列用于排序而不是计算值。
由于你的表达式很长,将查询转为子查询更简单,并在外部查询中排名:
select
t.*,
rank() over(partition by question_set_id order by score) rn
from (
-- your existing query (without rank)
) t
我正在尝试根据对现有列的一些计算来执行排名。我尝试使用 SQL RANK() 函数,但是即使排序依据(分数列)的值不同,它也会将所有条目的结果显示为 1。详情请见下方:
- qu_point和ti_points是计算列
- score 列也是派生列,但是,只是第 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
请帮助我如何根据question_set_id和ranked进行划分得分.
附上截图供您参考。 enter image description here
您不能在同一子句中使用 select
子句中定义的别名。我想您的 table 中有一个名为 score
的列,否则您的查询会出错 - 因此此现有列用于排序而不是计算值。
由于你的表达式很长,将查询转为子查询更简单,并在外部查询中排名:
select
t.*,
rank() over(partition by question_set_id order by score) rn
from (
-- your existing query (without rank)
) t