mysql数据库分组(GROUP BY)学习笔记
每当查询数据库时,想知道有多少类,或想知道找不相同的有多少种,就用到了分组语句group by
使用方法:
代码如下 | |
SELECT * FROM `表名` group by `分组字段` |
或带limit做法
代码如下 | |
SELECT * |
例:(查询dedecms(织梦)程序的栏目标题表,以栏目id分组)
代码如下 | |
SELECT * |
关于mysql group by排序问题 .
类如 有一个 帖子的回复表,posts( id , tid , subject , message , dateline ) ,
id为 自动增长字段, tid为该回复的主题帖子的id(外键关联), subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳表示,
最简单的 :
代码如下 | |
|
也有网友利用自连接实现的 ,这样的效率应该比上面的子查询效率高,不过,为了简单明了,就只用这样一种了,GROUP BY没有排序功能,可能是mysql弱智的地方,也许是我还没有发现,
where+group by(对小组进行排序)
对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但group_concat的作用是将小组里的字段里的值进行串联起来。
代码如下 | |
select group_concat(id order by `date` desc) from `test` group by category_id |
代码如下 | |
select * from `test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc |
子查询解决方案
代码如下 | |
select * from (select * from `test` order by `date` desc) `temp` group by category_id order by `date` desc |