MySQL分页查询、分组遇到的两个问题

一、分页查询时排序的字段重复,导致数据重复和丢失
原因
    如果列中的多个行具有相同的值ORDER BY,则服务器可以按任何顺序自由返回这些行,这些行的排序顺序相对于无序列是不确定的。
结论
    不能依赖MySQL的默认排序,排序的字段数据重复可以增加排序的字段,来提高排序的唯一性。
数据库内核月报 · MySQL Sort 分页

二、分组查询时,获取每组最新的一条记录。
场景:
    查询撰稿人的最新文章
错误SQL:
    a、只有pub_time这列的值取到最大的

SELECT id,title,create_user_id,MAX(pub_time) FROM m_author_article GROUP BY create_user_id

    b、先排序后分组

SELECT * FROM (SELECT id,title,create_user_id,pub_time FROM m_author_article ORDER BY pub_time) AS temp GROUP BY create_user_id

    同

SELECT id,title,create_user_id,pub_time FROM m_author_article GROUP BY create_user_id

    结果相同,取该组中查询到的第一条记录。
实现SQL
    使用相关性子查询

SELECT id, title, create_user_id, pub_time FROM m_author_article t1 WHERE pub_time = (SELECT MAX(pub_time) FROM m_author_article WHERE create_user_id = t1.create_user_id)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值