group by内部排序

规则:
第一,凡是在group by后面出现的字段,必须同时在select后面出现;

第二,凡是在select后面出现的、同时未在聚合函数中出现的字段,必须同时出现在group by后面.
第一和第二条规则任何一条不满足,则默认去分组的第一条记录显示

having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。
重点内容
如果想对于group by内部进行排序,例如下面这种情形:

CREATE TABLE info
(
info_id int NOT NULL AUTO_INCREMENT,
content int DEFAULT 0 NOT NULL,
update_time datetime DEFAULT 0 NOT NULL
)
这里每一个info_id对应着多个content,好比我们的论坛一样,每一个帖子,对应着多个评论
如果我们想取最新的那条评论有如下两种方式
第一种:
先对表中的内容按照update_time进行降序排序,然后再按照上面的规则,默认取分组中的第一条记录(因为content和update_time未出现在group by 后面);如下:
select
info_id , content , update_time
from
(select * from info order by update_time desc) as i
group by i.info_id
第二种:
先把所有需要的字段整体当做一个分组,再利用having语句对于分组进行刷选,选出当前info_id下,最大的update_time的那条记录
select
i1.info_id , i1.content, i1.update_time
from
info i1
group by
i1.info_id
having
i1.update_time =
(select max(update_time) from info i2 where i2.info_id = i1.info_id )
这样即可,大家如果还有什么好的建议记得告诉我。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值