mysql中group by之后order by无效

发布于 2022-09-02 12:43:28 字数 1303 浏览 21 评论 0

创建一张表(比如说帖子回复表,简单的几个字段)

create table replies(
    id int unsigned primary key auto_increment,
    uid int unsigned not null default 0,
    tid int unsigned not null default 0,
    content varchar(1000) not null default '',
    inputtime int unsigned not null default 0,
    updatetime int unsigned not null default 0
)engine myisam charset utf8;

插入数据

insert into replies
values
(null,3,4,'第四篇帖子的回复内容',1459848612,1459848612),
(null,4,1,'第一篇帖子的回复内容',1459858612,1459858612),
(null,3,3,'第三篇帖子的回复内容',1459868612,1459868612),
(null,5,1,'第一篇帖子的回复内容',1459878612,1459878612),
(null,1,5,'第五篇帖子的回复内容',1459888612,1459888612),
(null,2,5,'第五篇帖子的回复内容',1459898612,1459898612),
(null,8,2,'第二篇帖子的回复内容',1459908612,1459908612);

这样排序自然没什么问题

select tid,max(inputtime) as aa from replies group by tid order by aa desc;

然而

select tid,max(inputtime) from replies group by tid order by inputtime desc;

这样排序的话,结果却是这样

clipboard.png

附个人理解:
这个max(inputtime)虽然和表上的数据是一样的,但它并不代表某个tid的inputtime,order by inputtime 实际是对表中的inputtime排序,所以这里看不到效果,但感觉这个理由有点牵强,请赐教,在这里谢谢诸位了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半衾梦 2022-09-09 12:43:28

https://segmentfault.com/a/1190000004879...
正确理解应该是shenyangyeshuai + 0808xyj + gzchen三个的回答

孤独难免 2022-09-09 12:43:28

本身 这两个就是 不同的SQL,MySQL 中 分组之后,默认取其第一条数据

凉墨 2022-09-09 12:43:28

首先第二条语句语义上就存在问题,既然max(列)后就不应该再按照原始(列)排序。
然后,你先了解一下sql语句的执行顺序你的疑惑就解决了
from -->join-->on-->where -->group by --> having --> select --> order by -->limit

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文