MySQL5.7排序后GROUP BY 问题

gohands 2016-08-10 10:17:41
加精
下载的MySQL5.7.14 解压版本,除了安装目录和端口,没有增加和修改任何设置:
test 表格中的数据是这样的:
id seq name
------ ------ --------
1 1 name1
2 2 name2
3 1 name2
4 2 name1
查询语句是这样的:
SELECT * FROM (SELECT * FROM test ORDER BY seq DESC ) tmp GROUP BY NAME
预期的结果时:
id seq name
------ ------ --------
2 2 name2
4 2 name1
但是实际结果却是这样的:
id seq name
------ ------ --------
1 1 name1
2 2 name2
这种写法在网上也有,是不是可以通过修改MYSQL参数来使其达到y预期的结果,谢谢了!
...全文
12760 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
数据工具人 2021-06-25
  • 打赏
  • 举报
回复

好好了解一下排序的规则和分组的规则,再了解一下select执行顺序,我相信你会发现问题

鬼谷天涯 2018-07-04
  • 打赏
  • 举报
回复
引用 6 楼 zjcxc 的回复:
通过 explain 查看执行计划,可以看到没有 limit 的时候,少了一个 DERIVED 操作
估计是内部优化了,认为 ORDER BY 在这种语法中可忽略
有 LIMIT 限制涉及排序后的结果,不会忽略 ORDER BY,可以达到预期


同意这种做法,这里要做的主要是使得mysql的优化器不对中间的order by进行内部优化。锦上添花一条sql吧。
SELECT * FROM (SELECT * FROM test,(select 0) a ORDER BY seq DESC) tmp GROUP BY NAME
Gunlance 2017-11-29
  • 打赏
  • 举报
回复
select * from tb where seq = 2 
小菜鸟正洋洋 2017-11-17
  • 打赏
  • 举报
回复
隔了那么久时间了,版主找到答案了吗?我现在只能用函数来硬拼的排序,版主知道了mysql5.7的优化原理没有啊? ` SELECT seller_id, SUBSTRING_INDEX(GROUP_CONCAT(amount ORDER BY amount),',',1) AS amount FROM seller_sku_active GROUP BY seller_id ORDER BY amount`
Sam.Shi 2017-11-08
  • 打赏
  • 举报
回复
我用的MySQL 5.7的版本,六楼的方法可以实现,解决了我的一个大问题,非常感谢!
kaiyan5 2017-08-17
  • 打赏
  • 举报
回复
MySQL 5.7版本中注意group的用法:

use emp;

set sql_mode='';

select x.salary,x.department_id from

(select e.* from emp e order by department_id,salary desc) x group by x.department_id;
ZXYperseverance 2017-08-16
  • 打赏
  • 举报
回复
SELECT * FROM (SELECT * FROM test ORDER BY NAME DESC ) tmp GROUP BY NAME
放下过去的人 2017-08-15
  • 打赏
  • 举报
回复
6# 大神,佩服
scutlearn001 2017-08-10
  • 打赏
  • 举报
回复
通过子查询实现
SELECT * FROM test where id in (SELECT max(id) FROM test ORDER BY seq DESC );
hdsdpf 2017-02-19
  • 打赏
  • 举报
回复
多多来学习一下
Alan CGH 2017-02-15
  • 打赏
  • 举报
回复
6楼正解,可以达到预期效果,赞一个
tjficcbw 2016-10-22
  • 打赏
  • 举报
回复
+------+------+-------+ | id | seq | name | +------+------+-------+ | 2 | 2 | name2 | | 4 | 2 | name1 | +------+------+-------+
tjficcbw 2016-10-22
  • 打赏
  • 举报
回复
我这本地MYSQL5, SELECT * FROM (SELECT * FROM test ORDER BY seq DESC ) tmp GROUP BY NAME order by id 成功
ocaicai 2016-10-21
  • 打赏
  • 举报
回复
6楼正解,加explain可以看得更清楚
bytepan 2016-10-03
  • 打赏
  • 举报
回复
不错
a753255157 2016-10-03
  • 打赏
  • 举报
回复
6楼正解!的确应该是内部优化的问题
torcher 2016-08-23
  • 打赏
  • 举报
回复
用了group by 的语句不建议用*号。
诺水城子 2016-08-23
  • 打赏
  • 举报
回复
DESC,降序排列
小灰狼 2016-08-22
  • 打赏
  • 举报
回复
SELECT * FROM test ORDER BY seq DESC 这种写法也就只在 mysql 中允许出现,在sqlserver, oracle之类的数据库里是会出错的 不知道楼主这样写是要得到什么结果
伊顺鸣 2016-08-22
  • 打赏
  • 举报
回复
加载更多回复(12)

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧