zoukankan      html  css  js  c++  java
  • mysql里group by按照分组里的内容的排序

    得到一张表里按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不唯一,没有办法做第二次的排序取最大值。

  • 相关阅读:
    java实现快速排序
    java实现简单回文算法
    HTML条件注释
    LeetCode 将有序数组转换为二叉搜索树
    LeetCode 有效的数独
    Leetcode 买卖股票的最佳时机 II
    模拟登陆163邮箱
    oracle 视图的相关操作
    oracle 约束类别
    软件测试用例知识点梳理
  • 原文地址:https://www.cnblogs.com/kudosharry/p/3972291.html
Copyright © 2011-2022 走看看