動態(tài)網(wǎng)站開發(fā)的集成軟件有哪些培訓(xùn)學(xué)校資質(zhì)辦理條件
----查詢每天刷題通過數(shù)最多的前二名用戶id和刷題數(shù)
現(xiàn)有??退㈩}表questions_pass_record,請查詢每天刷題通過數(shù)最多的前二名用戶id和刷題數(shù),輸出按照日期升序排序,查詢返回結(jié)果名稱和順序為:
date|user_id|pass_count
表單創(chuàng)建和數(shù)據(jù)的插入:
drop table if exists questions_pass_record;
CREATE TABLE questions_pass_record
(user_id int NOT NULL,question_type varchar(32) NOT NULL,device varchar(14) NOT NULL,pass_count int NOT NULL,date date NOT NULL
);
INSERT INTO questions_pass_record
VALUES (101, 'java', 'app', 2, '2020-03-01');
INSERT INTO questions_pass_record
VALUES (102, 'sql', 'pc', 15, '2020-03-01');
INSERT INTO questions_pass_record
VALUES (102, 'python', 'pc', 9, '2021-04-09');
INSERT INTO questions_pass_record
VALUES (202, 'python', 'pc', 11, '2021-04-09');
INSERT INTO questions_pass_record
VALUES (104, 'python', 'app', 3, '2021-04-09');
INSERT INTO questions_pass_record
VALUES (105, 'sql', 'pc', 60, '2018-08-15');
INSERT INTO questions_pass_record
VALUES (104, 'sql', 'pc', 20, '2018-08-15');
INSERT INTO questions_pass_record
VALUES (304, 'sql', 'pc', 10, '2018-08-15');
查詢語句:
select user_id,pass_countfrom (select date,user_id,pass_count,dense_rank( )over(PARTITION BY user_id ORDER BY date ) as rank_numfrom questions_pass_recordgroup by date,user_id,pass_count) twhere rank_num in (1,2)
在查詢中:
DENSE_RANK( )
函數(shù)用于在每個分組內(nèi)按照指定的排序方式為行分配一個排名值,排名值可以重復(fù),并且不存在斷開的排名。通過使用 DENSE_RANK( )
函數(shù),可以方便地為每個分組內(nèi)的行分配排名值,用于處理需要對數(shù)據(jù)進行排名和分組的情況。
語法:
DENSE_RANK() OVER (PARTITION BY column1 ORDER BY column2)
PARTITION BY
指定了分組的列,ORDER BY
指定了排序的列。
dense_rank( )over(PARTITION BY user_id ORDER BY date ) as rank_num
使用 DENSE_RANK( )
函數(shù)為每個分組內(nèi)的行分配一個排名值,分組依據(jù)是 user_id 列,排序依據(jù)是 date 列,將排名值命名為 rank_num。
需要注意:
① RANK( )
、DENSE_RANK( )
和 ROW_NUMBER( )
函數(shù)是用于計算和分配行排序值的窗口函數(shù)。它們在使用 OVER
子句時可以根據(jù)指定的排序規(guī)則為結(jié)果集中的行分配排名、稠密排名或行號。
② RANK( ) 函數(shù):
RANK( )
函數(shù)為結(jié)果集中的行分配排名值,并且具有相同值的行將具有相同的排名值,隨后的排名值將會跳過相同的排名并遞增。
示例,查詢學(xué)生成績排名:
select *,rank() over (order by Score desc) as rank_over
from Stu_Scores
執(zhí)行結(jié)果:
③ DENSE_RANK( ) 函數(shù):
DENSE_RANK( )
函數(shù)為結(jié)果集中的行分配稠密排名值,具有相同值的行將具有相同的排名值,但排名值不會跳過。
示例,查詢學(xué)生成績排名:
select *,dense_rank() over (order by Score desc) as dense_rank_over
from Stu_Scores
執(zhí)行結(jié)果:
④ ROW_NUMBER( ) 函數(shù):
ROW_NUMBER( )
函數(shù)為結(jié)果集中的行分配唯一的行號,每行的行號都是唯一的。
示例,查詢學(xué)生成績排名:
select *,row_number() over (order by Score desc) as row_number_over
from Stu_Scores
執(zhí)行結(jié)果:
可根據(jù)實際需求選擇需要使用的函數(shù)。