得到一张表里按u_id分组,按count(id)排序,每个分组的pub_time最大的哪些记录,只取count(id)最大的4条

select a.u_id,a.name,a.u_name,a.id,a.pub_time,b.cn from mb_resource a,
(select max(pub_time) as pub_time,u_id,count(id) AS cn from mb_resource where auth_status = 2 GROUP BY u_id) b
where a.u_id = b.u_id and a.pub_time = b.pub_time order by b.cn desc limit 4;

子查询得到每个u_id分组的最新的pub_time,u_id,分组的里的总条数cn,
外层自连接查询i,查询出分组总条数前四的信息(这里可以使用使用right join来减少外层的数据集)
以上处理的原因是:
1.mysql不支持组内排序。
2.mysql不支持子查询limit。
3.使用max(pub_time),而没有使用id,是因为在子查询里按分组来筛选max(pub_time),得到的id不应定是对应的那条数据的id


得到一张表里按type分组,每组里hot最大的前7条,
select a.name,a.id,a.type,a.hot from mb_resource a where a.auth_status=2
and 7 > (select count(*) from mb_resource where auth_status=2 and type = a.type and hot > a.hot ) order by a.type desc, a.hot desc,a.pub_time desc

以上处理的原因是:
1.mysql不支持组内排序。
2.mysql不支持子查询limit。
3.没有使用分组,hot值的count不唯一,没有办法做第二次的排序取最大值。

相关文章:

  • 2022-12-23
  • 2021-12-09
  • 2022-12-23
  • 2021-09-23
  • 2022-02-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-16
  • 2022-12-23
  • 2022-12-23
  • 2021-10-25
  • 2021-07-25
相关资源
相似解决方案