Mysql5.7中子查询时order by与group by合用无效的解决办法

   2019-06-12 13:59:25

mysql

group by总是会取得分组的第一条记录,我们对分组的记录进行一下调整就能取到想要的数据,如:取得每个部门最高薪水的人 数据表:
CREATE TABLE `staff` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `salary` int(10) DEFAULT NULL,
  `dept` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
使用SQL:SELECT * FROM (SELECT * FROM staff ORDER BY salary DESC) a GROUP BY dept 上面这句SQL是没有错误的,
但是我们发现他拿不到我们想要的数据,似乎order by子查询得到的表中的数据并没有在外部查询中起作用,但是:mysql 5.7 中 ,
这种语法并没有效果,正确的写法是:
 SELECT * FROM (SELECT * FROM staff ORDER BY salary DESC LIMIT 0,999) a GROUP BY dept
重点就是LIMIT部分,通过 explain 查看执行计划,可以看到没有 LIMIT 的时候,少了一个 DERIVED 操作。DERIVED用于派生表的SELECT
(FROM子句的子查询),所以没有它就相当于子句里的排序并没有被执行。

相关评论:

靡不有初|  当前时间:  |  网站运行时间:  |鲜克有终

今年剩余【农历】:

粤ICP备19080315号