mysql group by 排序问题一些自我理解

类如 有一个 帖子的回复表,posts( id , tid , subject , message , dateline ) ,

id为 自动增长字段, tid为该回复的主题帖子的id(外键关联), subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳表示,

现在要求 选出 前十个来自不同主题的最新回复

 代码如下 复制代码

SELECT * FROM posts GROUP BY tid LIMIT 10

这样一个sql语句选出来的并非你想要的 最新的回复,而是最早的回复,实际上是某篇主题的第一条回复记录!

也就是说 GROUP BY 语句没有排序,那么怎么才能让 GROUP 按照 dateline 倒序排列呢?加上 order by 子句?

group by 后order by不准确问题,解决如下:

错误语句

 代码如下 复制代码

select A.id, A.type, B.id, B.h1 from A,B where A.type=3 and A.id=B.id group by B.id order by A.id desc limit 10

正确语句

 代码如下 复制代码

select A.id, A.type, B.id, B.h1 from A,B where A.type=3 and A.id=B.id group by B.id order by max(A.id) desc limit 10

最简单的 :

 代码如下 复制代码

SELECT * FROM (SELECT * FROM posts ORDER BY dateline DESC) AS p GROUP BY tid ORDER BY dateline DESC LIMIT 10

也有网友利用自连接实现的 ,这样的效率应该比上面的子查询效率高,不过,为了简单明了,就只用这样一种了,GROUP BY没有排序功能,可能是mysql弱智的地方,也许是我还没有发现.

时间: 2024-12-03 00:14:57

mysql group by 排序问题一些自我理解的相关文章

Mysql group by 排序问题

 类如 有一个 帖子的回复表,posts( id , tid , subject , message ,  dateline ) , id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联),  subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳表示, 现在要求 选出 前十个来自不同主题的最新回复 SELECT * FROM posts GROUP BY  tid  LIMIT 10 这样一个sql语句选出来的并非你想要的 最

MySQL Group By用法

MySQL Group By用法 我们现在回到函数上.记得我们用 SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么办呢?在这个情况下,我们要做到两件事:第一,我们对于 store_name 及 Sales 这两个栏位都要选出.第二,我们需要确认所有的 sales 都要依照各个 store_name 来分开算.这个语法为: SELECT "栏位1", SUM("栏位2"

To MGR or Not MGR? Review of MySQL Group Replication

MySQL Group Replication GA On December 12, 2016, Oracle released exciting news to the MySQL circle. It officially launched version 5.7.17 of MySQL, which includes the long-awaited MySQL Group Replication (MGR). This article provides insights on the b

Galera 将死 — MySQL Group Replication 发布

MySQL Group Replication GA 很多同学表示昨天的从你的全世界路过画风不对,好在今天MySQL界终于有大事情发生可作为聊资.话说,当昨天小伙伴们沉浸于双12的买买买节奏中,孰料远在美国西海岸的Oracle官方放出了最新的MySQL 5.7.17版本.更为重要的是,MySQL Group Replication(下简称MGR)终于来了. 在之前的MySQL的一致性世界的文章中,Inside君已经表示腾讯基于Paxos的强一致方案虽好,但官方基于Paxos的方案早已箭在弦上,作

Galera将死——MySQL Group Replication正式发布

2016-12-14 来源:InsideMySQL 作者:姜承尧 MySQL Group Replication GA 很多同学表示昨天的从你的全世界路过画风不对,好在今天MySQL界终于有大事情发生可作为聊资.话说,当昨天小伙伴们沉浸于双12的买买买节奏中,孰料远在美国西海岸的Oracle官方放出了最新的MySQL 5.7.17版本.更为重要的是,MySQL Group Replication(下简称MGR)终于来了. 在之前的MySQL的一致性世界的文章中,Inside君已经表示腾讯基于Pa

MySQL Group Commit的优化

最近花了一些时间在做MySQL Group Commit的优化,关于Group commit的原理,这里不再赘述,有兴趣的可以翻阅我之前的博客http://mysqllover.com/?p=581,这里简单描述下两点优化,主要基于MySQL5.6.16 1.优化binlog_order_commits=0并且sync_binlog>0时的性能  我们知道当binlog_order_commits关闭时,表示我们能接受binlog commit和innodb commit的顺序不同(这不会带来数

MySQL的权限排序问题

MySQL的权限排序问题 实验:因权限表具有通配符,对权限进行排序后,匹配时引来的问题. 授权表中的通配符 user表中User为空值表示匹配任意user name,也表示匿名用户. user表中Host部分用户可以使用通配符"%"和"_"在host name或者IP地址中,这些具有和模式匹配LIKE相同的意义. db表中,Host.User与user表中表示方法一致,同时Db列也可以具有通配符. tables_priv.columns_priv和procs_pri

Mysql group replication复制原理

前言:          Mysql版本5.7.17推出Mysql group replication(组复制),相对以前传统的复制模式(异步复制模式async replication 及半同步复制模式semi-sync replication),一个主,对应一个或多个从,在主数据库上执行的事务通过binlog复制的方式传送给slave,slave通过 IO thread线程接收将事务先写入relay log,然后重放事务,即在slave上重新执行一次事务,从而达到主从事务一致的效果,如下图为两

公开课发布《MySQL Group Replication思想》

0.导读 央视网络国际有限公司资深MySQL专家古雷老师分享<MySQL Group Replication思想>. 1.活动总结 昨天晚上,知数堂培训邀请到央视网络国际有限公司资深MySQL专家古雷老师分享<MySQL Group Replication思想>主题.形象的通过马农.砖家与运韦合伙种地.放鸽子.鸽子间如何相互通信协调的故事,让我们对MySQL Group Replication的基础原理有了深刻认识. 本次分享通过"IT大咖说"平台进行,相关的课