zoukankan      html  css  js  c++  java
  • MySQL、SQLServer、Oracle 分组排序

      1. MySQL:

    1.聚集函数:max(),min(),avg(),sum(),count()
    在分组上应用聚集函数。
    2.聚合函数对应于每组的数据:即max(id) 每组最大的id
    3.having 是group by分组后的结果集再加的条件(having相当于Where 但只能在group by后,条件可以是聚合函数(真实表中可能不存在的数据))。

    例如:

    SELECT
        * 
    FROM
        tb_chatlog 
    WHERE
        chatid IN ( SELECT max( Chatid ) maxId FROM tb_chatlog WHERE LoginUser = '*******' GROUP BY LoginUser, BuyerName );

    select 后可以出现任意字段,并不是非得分组的字段。

    分组字段越多,数据越少,分组排序一般都是获取组内排序后的某个值(最大id值),这是可以合理分配分组字段和聚合函数得到最大id集合,再根据子查询即可取得所需数据结果集。

      2. SQLServer:

    SQLserver 分组查询:

    函数:ROW_NUMBER ( ) over

    SQLserver中:group by 后的字段,在select 后可以出现,不在group by 的字段在select 只能使用聚合函数。

    SELECT
        * 
    FROM
        (
    SELECT
        ROW_NUMBER ( ) over ( PARTITION BY LoginUser, BuyerName ORDER BY ChatTime DESC ) rowNums,* 
    FROM
        tb_chatlog 
    WHERE
        LoginUser = '丰达盛伟服饰专营店' 
        AND ChatTime >= '2019-07-07 00:00' 
        AND ChatTime <= '2019-07-17 23:59' 
        AND Direction = '0' 
        ) subGroup 
    WHERE
        rowNums = '1';

    3. Oracle:

    select * from(

    select t.*, row_number() over(partition byF_ATTRACTIONID order by F_TIME desc ) rk from T_ATTRACTION_CG t WHERE t.F_TIME<TO_DATE('2015-9-07 00:00:00','yyyy-mm-dd hh24:mi:ss'))

    where rk=1

    row_number() OVER(PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
    ---------------------
    参考:https://blog.csdn.net/xcymorningsun/article/details/52754065

    源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
  • 相关阅读:
    inflate用一个XML源填充view. LayoutInflater
    关于inflate的第3个参数
    关于inflate的第3个参数
    android ImageView scaleType属性
    android ImageView scaleType属性
    Android中设置文本颜色的三种方法
    JDK1.8与spring3.x的不兼容
    Spring整合activiti单元测试
    良好编程习惯的养成
    No output operations registered, so nothing to execute
  • 原文地址:https://www.cnblogs.com/erlongxizhu-03/p/11248401.html
Copyright © 2011-2022 走看看