• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql获取分组后每组的最大值实例详解

     mysql获取分组后每组的最大值实例详解

    1. 测试数据库表如下:

    create table test 
    ( 
      `id` int not null auto_increment, 
      `name` varchar(20) not null default '', 
      `score` int not null default 0, 
      primary key(`id`) 
    )engine=InnoDB CHARSET=UTF8; 
    

    2. 插入如下数据:

    mysql> select * from test; 
    +----+----------+-------+ 
    | id | name   | score | 
    +----+----------+-------+ 
    | 1 | jason  |   1 | 
    | 2 | jason  |   2 | 
    | 3 | jason  |   3 | 
    | 4 | linjie  |   1 | 
    | 5 | linjie  |   2 | 
    | 6 | linjie  |   3 | 
    | 7 | xiaodeng |   1 | 
    | 8 | xiaodeng |   2 | 
    | 9 | xiaodeng |   3 | 
    | 10 | hust   |   2 | 
    | 11 | hust   |   3 | 
    | 12 | hust   |   1 | 
    | 13 | haha   |   1 | 
    | 14 | haha   |   2 | 
    | 15 | dengzi  |   3 | 
    | 16 | dengzi  |   4 | 
    | 17 | dengzi  |   5 | 
    | 18 | shazi  |   3 | 
    | 19 | shazi  |   4 | 
    | 20 | shazi  |   2 | 
    +----+----------+-------+ 
    

    3. 下面是重点,目的是要按照name分组,然后分组后,获取每组中score分数最多的,sql如下

    select a.* from test a inner join (select name,max(score) score from test group by name)b on a.
    name=b.name and a.score=b.score order by a.name; 
    

    当然,上面的最后的order by a.name可以去掉

    4. 测试结果如下:

    +----+----------+-------+ 
    | id | name   | score | 
    +----+----------+-------+ 
    | 3 | jason  |   3 | 
    | 6 | linjie  |   3 | 
    | 9 | xiaodeng |   3 | 
    | 11 | hust   |   3 | 
    | 14 | haha   |   2 | 
    | 17 | dengzi  |   5 | 
    | 19 | shazi  |   4 | 
    +----+----------+-------+ 
    

    5. 网上很多方法都是错误的,比如如下一些,亲测是不行的

    select * from (select * from test order by score desc) t group by name order by score desc limit 4; 
    select score,max(score) from test group by name; 
    select * from test where score in (select max(score) from test group by name); 
    select * from test where score in (select substring_index(group_concat(score order by score desc separator ','),',',1) from test group by name); 
     
    select * from (select name,score,ROW_NUMBER() over(group by name order by score desc) as rowNum from test) rank where rank.rowNum =1 order by rank.score desc; 
     
    select * from( select StoresNo,[CustomerCaseNo],[PaymentsTime], ROW_NUMBER() over(partition by CustomerCaseNo order by [PaymentsTime] desc) as rowNum 
    from BAL_paymentsSwiftInfo where StoresNo='zq00000034') ranked where ranked.rowNum = 1 order by ranked.CustomerCaseNo, ranked.PaymentsTime desc 
     
    select * from (select * from test order by score desc) as a group by a.name; 
    
    

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • MySql分组后随机获取每组一条数据的操作
    • 基于mysql实现group by取各分组最新一条数据
    • MySQL 子查询和分组查询
    • MySQL 分组查询和聚合函数
    • MySql Group By对多个字段进行分组的实现方法
    • 详解MySQL分组排序求Top N
    • Mysql利用group by分组排序
    • 详解MySQL 数据分组
    上一篇:Win10安装MySQL5.7.18winX64 启动服务器失败并且没有错误提示
    下一篇:MySQL中查询、删除重复记录的方法大全
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql获取分组后每组的最大值实例详解 mysql,获取,分组,后,每组,