- 浏览: 175541 次
- 来自: 深圳
文章分类
最新评论
-
GGGGeek:
MySQL5.7.24varchar(65532)报错:107 ...
int(11)最大长度是多少,MySQL中varchar最大长度是多少?
Mysql group by 与order by 排序问题 (转)
- 博客分类:
- Mysql
取出每个分类中最新的内容
代码如下:
select * from test group by category_id order by `date`
结果如下
明显。这不是我想要的数据,原因是msyql已经的执行顺序是
引用
写的顺序:select ... from... where.... group by... having... order by..
执行顺序:from... where...group by... having.... select ... order by...
所以在order by拿到的结果里已经是分组的完的最后结果。
由from到where的结果如下的内容。
到group by时就得到了根据category_id分出来的多个小组
到了select的时候,只从上面的每个组里取第一条信息结果会如下
即使order by也只是从上面的结果里进行排序。并不是每个分类的最新信息。
回到我的目的上 --分类中最新的信息
根据上面的分析,group by到select时只取到分组里的第一条信息。有两个解决方法
1,where+group by(对小组进行排序)
2,从form返回的数据下手脚(即用子查询)
由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
数据表结构
create table `test` (
`id` int(10) not null auto_increment,
`name` varchar(255) not null,
`category_id` int(10) not null,
`date` timestamp not null default current_timestamp,
primary key (`id`)
)
engine=myisam
row_format=default;
insert into `test` (`id`, `name`, `category_id`, `date`)
values
(1, 'aaa', 1, '2010-06-10 19:14:37'),
(2, 'bbb', 2, '2010-06-10 19:14:55'),
(3, 'ccc', 3, '2010-06-10 19:14:02'),
(4, 'ddd', 1, '2010-06-10 19:16:15'),
(5, 'eee', 2, '2010-06-10 19:16:35');
(6, 'fff', 3, '2010-06-10 19:16:45');
讨论:选出论坛 前十个来自不同主题的最新回复,又该如何写呢?待续...
来源:http://www.111cn.net/database/mysql/33544.htm
发表评论
-
PHP+MYSQL大小写问题
2014-11-21 11:33 1622[PHP]一、大小写敏感 1. 变量名区分大小写 所有变 ... -
sqlstate[HY000][2002]php_network_getaddresses 错误
2014-04-09 14:45 3837sqlstate[HY000][2002]php_netw ... -
MySQL中的datetime与timestamp比较
2013-09-17 16:29 2041相同 显示 TIMESTAMP列的显示格式与DATETI ... -
mysql 二进制
2013-09-17 16:26 4601MYSQL的binary解决mysql数据大小写敏感问题 ... -
提高php代码质量 36计
2013-08-26 17:31 8261.不要使用相对路径常常会看到: 复制代码 requi ... -
MySQL 的 10 个技巧
2013-08-23 11:46 740避免编辑转储文件 Mysq ... -
MySql如何插入和查询二进制数据
2013-08-15 22:31 4863Mysql:bit类型的查询与插入mysql有种字段类型是b ... -
MySQL字符集查看方法
2013-08-09 16:41 789MySQL字符集多种多样,下面为列举了其中三种最常见的字符 ... -
SELECT INTO FROM与INSERT INTO SELECT区别
2013-08-06 16:49 1325select * into destTbl from s ... -
php mysql临时表的应用
2013-07-30 10:29 2327当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大 ... -
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013-07-25 15:06 1010php 获取今日、昨日、 ... -
mysql查询今天,昨天,近7天,近30天,本月,上一月数据的方法
2013-07-25 15:05 1428mysql查询今天,昨天,近7天,近30天,本月,上一月数据 ... -
MySQL 获得当前日期时间 \ 时间戳 函数 \ 时间转换函数
2013-07-19 17:01 1159一、MySQL 获得当 ... -
int(11)最大长度是多少,MySQL中varchar最大长度是多少?
2013-07-18 10:55 24723int(11)最大长度是多少? 在SQL语句 ... -
如何用MYSQL删除表中重复数据
2013-09-10 10:45 1701通常情况下,一个我们在 ... -
mysql取随机5条记录
2013-05-20 15:37 0SELECT * FROM `table` AS t1 JOI ... -
MySQL之alter语句用法总结
2013-08-21 16:56 623MySQL之alter语句用法总结 1:删除列 ALT ... -
order by + limit非常慢的问题解析
2013-04-27 09:07 0发现其sql如下: mysql> ... -
on duplicate key update, insert ignore into, replace into等的一些用法总结
2013-03-29 10:23 0在MySQL中进行条件插入数据时,可能会用到以下语句,现小 ... -
MySQL中UNION和UNION ALL的使用
2013-03-28 21:05 1294来源:http://hi.baidu.com/du ...
相关推荐
本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表 我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下 明显。这不是我想...
mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group ...
–按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...
MySQL的group by与Oracle有所不同,查询得字段可以不用写聚合函数,查询结果取得是每一组的第一行记录。 利用上面的特点,可以利用mysql实现一种独特的排序; 首先先按某个字段进行order by,然后把有顺序的表进行...
在MySQL数据库中,ORDER BY、GROUP BY 和 HAVING 子句是SQL查询中用于数据处理的关键组成部分,它们各自承担不同的任务,以帮助我们从数据库中提取有用的信息。 ORDER BY 子句主要用于对查询结果集进行排序。当你...
在MySQL中,`COUNT()`, `GROUP BY`, 和 `ORDER BY` 是三个非常重要的SQL语句组成部分,它们各自承担着不同的职责,同时也常被结合在一起使用以满足复杂的数据查询需求。 `COUNT()` 是一个聚合函数,它用于计算指定...
MySQL中的`ORDER BY`和`GROUP BY`是SQL查询中两个关键的子句,它们用于对查询结果进行排序和分组。然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`...
创建表&创建索引 ...MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化: 1、ORDER BY的索引优化 如果一个SQL语句形如: SELECT
order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是... 您可能感兴趣的文章:sql中 order by 和 group by的区别深度分析mysql GROUP BY 与 ORDER BYgroup by,having,o
- **分组后排序:**在`GROUP BY`后使用`ORDER BY`可以对分组后的结果进行排序,如`ORDER BY column1 ASC/DESC`。 **4. 注意事项** - 在`SELECT`列表中,除了聚合函数外,只能包含`GROUP BY`子句中出现的列。 - `...
- `SELECT gender, COUNT(*) AS num_students FROM student GROUP BY gender HAVING num_students > 2 ORDER BY num_students DESC;` 通过上述介绍可以看出,聚合查询、分组和排序是在MySQL中处理和分析数据的强大...
MySQL的`ORDER BY`和`GROUP BY`子句在执行查询时,对于性能的影响是显著的,尤其是在大数据量的表中。为了提高查询效率,索引优化显得至关重要。本文将详细介绍如何利用索引来优化`ORDER BY`操作。 首先,MySQL在...
在优化order by排序时,首先应当尽量利用索引来实现排序,即使用index方式排序,避免使用FileSort方式排序。FileSort是MySQL在内存中临时排序的过程,当不能利用索引排序时,MySQL会进行文件排序,这会消耗大量的CPU...
在MySQL数据库中,GROUP BY语句通常用于对数据进行分组,以便对每个分组执行聚合函数,如COUNT(), SUM(), AVG(), MAX(), MIN()等。然而,有时我们需要在分组后获取每个分组的前N条记录,这在处理统计分析或排名问题...
如果想去除重复值并按特定顺序排序,可以在`GROUP_CONCAT`内部使用`DISTINCT`和`ORDER BY`,如`GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')`。 `WITH ROLLUP`是`GROUP BY`的一个...