关于group by的排序问题

zhiin1 2007-08-02 11:21:31
select * from t group by username order by logtime desc

MySQL对上述语句的处理方式是: 先群组,群组后再排序
但是我现在想排序后再群组该如何解决呢?


---------
ps.用如下方式可以解决, 但是感觉效率太低, 不知道还有没有更好的办法!
谢谢大家!

select * from (select * from t order by logtime desc) t2 group by username
...全文
3707 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
该昵称很风骚 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 snkzhong2006 的回复:]
下面的SQL语句可以解决,我碰到同样的问题已经搞定了

SELECT max(id) as mid, d.* FROM d GROUP BY user_id HAVING id=mid

查了MYSQL手册,having作为group by 后的筛选条件 可以用聚合函数作为条件,不同于where

max(id) 取得user_id相同的多行数据中最大的id,然后要把这整行数据取出来……
[/Quote]
遇到同样的问题,这样不行啊
hehe4569 2010-05-27
  • 打赏
  • 举报
回复
market
snkzhong2006 2007-11-01
  • 打赏
  • 举报
回复
下面的SQL语句可以解决,我碰到同样的问题已经搞定了

SELECT max(id) as mid, d.* FROM d GROUP BY user_id HAVING id=mid

查了MYSQL手册,having作为group by 后的筛选条件 可以用聚合函数作为条件,不同于where

max(id) 取得user_id相同的多行数据中最大的id,然后要把这整行数据取出来,用having最为筛选条件就可以了

执行顺序应该是 where > group by > having
懒得去死 2007-10-10
  • 打赏
  • 举报
回复
这里的可以看看:
http://nalai.net/content/view/305072/32/
懒得去死 2007-10-10
  • 打赏
  • 举报
回复
或者你可以分成两句来完成
懒得去死 2007-10-10
  • 打赏
  • 举报
回复
我看你想提高效率的话就加个LIMIT语句限制一下。
懒得去死 2007-10-04
  • 打赏
  • 举报
回复
TO LZ:

用wildlily980的方法。加上一个字段就可以了。你自己不加吗??

select max(id),user_id,other from d group by user_id,other order by max(id);
wildlily980 2007-10-04
  • 打赏
  • 举报
回复
具体我现在有点印象模糊了。有兴趣大家可以研究一下。
wildlily980 2007-10-04
  • 打赏
  • 举报
回复
TO版主:
我那个方法,某些情况下可能是可以的。对于楼主的情况可能不能正常工作。前一阵子看了一下。可能还需要一个子查询。因为对于他列出的第三项other,mysql可能会选出一个随机结果。而不是对应的最大的id 列。
wildlily980 2007-08-17
  • 打赏
  • 举报
回复
select max(id),column_1,column_2............ from d group by user_id order by max(id);
如果你非要select *这种办法,
当我没有说过好了.
zhiin1 2007-08-16
  • 打赏
  • 举报
回复
To 小李

+------+---------+--------+
| id | user_id | other |
+------+---------+--------+
| 1 | 7 | 8 |
| 2 | 8 | 2 |
| 3 | 9 | 3 |
| 4 | 7 | 4 |
| 5 | 9 | 5 |
+------+---------+--------+

我想把与最大ID同行的other字段的值也取出, 用你的语句是取不到的

wildlily980 2007-08-15
  • 打赏
  • 举报
回复
你想要同一组里面最大的那个值对不?
我可是试过的哦.你为什么不试试呢?
mysql> select id,user_id from d;
+------+---------+
| id | user_id |
+------+---------+
| 1 | 7 |
| 2 | 8 |
| 3 | 9 |
| 4 | 7 |
| 5 | 9 |
+------+---------+
5 rows in set (0.00 sec)

mysql> select max(id),user_id from d group by user_id order by max(id);
+---------+---------+
| max(id) | user_id |
+---------+---------+
| 2 | 8 |
| 4 | 7 |
| 5 | 9 |
+---------+---------+
3 rows in set (0.00 sec)
zhiin1 2007-08-15
  • 打赏
  • 举报
回复
楼上的理解错误 ;-)

你的排序只是对group by之后的结果进行地排序
而我是需要group by出最大的一行
wildlily980 2007-08-15
  • 打赏
  • 举报
回复
这个问题见你问几天了.
兄弟,你都是星星了.好像不见你有查google啊.
这是我查询的结果.
select max(log_time),user_name from table_name group by user_name order by max(log_time);
好用的话,别忘了给分.
zhiin1 2007-08-11
  • 打赏
  • 举报
回复
继续顶
lladmin 2007-08-08
  • 打赏
  • 举报
回复

“難道先分組後排序與先排序後分組的結果不一樣嗎,我就郁悶了”



结果是不一样的,不过这样的结果还真没用过
wildlily980 2007-08-06
  • 打赏
  • 举报
回复
我以前google别的时候无意中见过这个问题,解决起来也是嵌套的办法,有点复杂.具体地址记不起来了.
zhiin1 2007-08-05
  • 打赏
  • 举报
回复
TO ChumpKlutz(朽木)
--------

难道一样? 细细考虑一下
ChumpKlutz 2007-08-04
  • 打赏
  • 举报
回复
難道先分組後排序與先排序後分組的結果不一樣嗎,我就郁悶了
懒得去死 2007-08-03
  • 打赏
  • 举报
回复
子查询在大数据的时候不推荐使用。
加载更多回复(3)

56,675

社区成员

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

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