加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.52kongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL和Mariadb中的分组排序区别

发布时间:2022-10-29 16:06:35 所属栏目:MySql教程 来源:
导读:  在MySQL和MariaDB中都可以实现分组排序MySQL 排序,但实现上仍存在稍微差别。测试环境分别选择 MySQL社区版MySQL8.0.21.0和MariaDB10.3.12。

  下面通过实例进行测试:

  DROP TABLE IF EXISTS row_
  在MySQL和MariaDB中都可以实现分组排序MySQL 排序,但实现上仍存在稍微差别。测试环境分别选择 MySQL社区版MySQL8.0.21.0和MariaDB10.3.12。
 
  下面通过实例进行测试:
 
  DROP TABLE IF EXISTS row_number_test;
  CREATE TABLE row_number_test(empid INT, deptid INT, salary DECIMAL(10, 2));
  INSERT INTO row_number_test VALUES
   (1,10,5500.00),
   (2,10,4500.00),
   (3,20,1900.00),
   (4,20,4800.00),
   (5,40,6500.00),
   (6,40,14500.00),
   (7,40,44500.00),
   (8,50,6500.00),
   (9,50,7500.00);
  通过部门编号分组后,在一个部门内对字段 salary 进行降序排列:
 
  1.在MaraiDB中实现时,需要在内层子查询中使用limit关键字才能完成分组排序的预期效果
 
  SELECT
   deptid, salary, rk
  FROM (
   SELECT
   tmp.deptid, tmp.salary, @rownum:=@rownum+1,
   case when @pdept=tmp.deptid then @rank:=@rank+1 else @rank:=1 end AS rk,
   @pdept:=tmp.deptid
   FROM (
   SELECT deptid, salary FROM row_number_test
   ORDER BY deptid ASC, salary DESC limit 1000000
   ) tmp, (SELECT @rownum:=0, @pdept:=null, @rank:=0) a
  ) result;
  如果不添加limit关键字的查询效果如下:
 
  mysql 根据条件排序_mysql排序sort_MySQL 排序
 
  2.在MySQL8.0中不需要在查询中加limit 就可以完成分组排序的效果。
 
  SELECT
   deptid, salary, rk
  FROM (
   SELECT
   tmp.deptid, tmp.salary, @rownum:=@rownum+1,
   case when @pdept=tmp.deptid then @rank:=@rank+1 else @rank:=1 end AS rk,
   @pdept:=tmp.deptid
   FROM (
   SELECT deptid, salary FROM row_number_test
   ORDER BY deptid ASC, salary DESC limit 1000000
   ) tmp, (SELECT @rownum:=0, @pdept:=null, @rank:=0) a
  ) result;
 

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!