• MySQL 实现row_number() 分组排序功能


    数据库基本脚本

    CREATE TABLE `a` (
    	`ID` INT(10) NULL DEFAULT NULL,
    	`class` INT(10) NULL DEFAULT NULL,
    	`score` INT(10) NULL DEFAULT NULL
    )
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB;
    
    insert into a values (1,1,110);
    insert into a values (2,1,120);
    insert into a values (3,1,130);
    insert into a values (4,1,140);
    insert into a values (5,2,210);
    insert into a values (6,2,220);
    insert into a values (7,2,230);
    insert into a values (8,2,240);
    insert into a values (9,3,310);
    insert into a values (10,3,320);
    insert into a values (11,4,410);
    

     1. 对 class进行分组 取每组的前2条

    select id,class,score,rank from (
    select b.id,b.class,b.score,@rownum:=@rownum+1 ,
    if(@pdept=b.class,@rank:=@rank+1,@rank:=1) as rank,
    @pdept:=b.class
    from (
    select id,class,score from a order by id 
    ) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c ) result
    having rank <3 ;
    

     rank <3 指的相当月ruwnum<3 每组都自动给上了序号.多少条记录就多少个序号.指的是每组的.

     2.  对 class 进行分组   取记录满足两天的,也就是rownum=2 的数据

    select id,class,score,rank from (
    select b.id,b.class,b.score,@rownum:=@rownum+1 ,
    if(@pdept=b.class,@rank:=@rank+1,@rank:=1) as rank,
    @pdept:=b.class
    from (
    select id,class,score from a order by score desc 
    ) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c ) result
    having rank =2 ;
    

      

  • 相关阅读:
    #一点杂记
    《洛谷P3373 【模板】线段树 2》
    《Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020
    《牛客练习赛72C》
    《hdu2819》
    《hdu2818》
    《Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)》
    《51nod1237 最大公约数之和 V3》
    对输入的单词进行排序
    快速排序
  • 原文地址:https://www.cnblogs.com/zuolun2017/p/5812964.html
Copyright © 2020-2023  润新知