美文网首页Java知识点整理
排序函数、高级分组函数以及集合操作

排序函数、高级分组函数以及集合操作

作者: 程序员必修课 | 来源:发表于2018-01-18 16:14 被阅读0次

    排序函数

    ROW_NUMBER

    ROW_NUMBER() OVER(
    PARTITION BY col1 ORDER BY col2);
    表示根据col1分组,在分组内部根据col2排序;
    此函数计算的值就表示每组内排序后的顺序编号,组内连续且唯一;
    Rownum是伪列,ROW_NUMBER功能更强,可以直接从结果集中取出子集。

    ROW_NUMBER组内连续且唯一;

    RANK

    RANK() OVER(
    PARTITION BY col1 ORDER BY col2);
    表示根据col1分组,在分组内部根据col2给予等级标识;
    等级标识即排名,相同的数据返回相同排名,和ROW_NUMBER的区别是有重复值,而ROW_NUMBER没有;
    RANK组内相同值返回一致,不同值有跳跃。

    DENSE_RANK

    DENSE_RANK() OVER(
    PARTITION BY col1 ORDER BY col2)
    与RANK的区别在于不跳跃了。

    高级分组函数

    高级分组函数通常是用于统计。
    ROLUJP、CUBE和GROUPING SETS运算符是 GROUP BY子句的扩展。

    可使用UNION ALL来组合单个分组査询时相同的结果集,用来简化和高效 的实现统计查询。

    ROLLUP

    ROLLUP是把几组不同的分组的结果合在一起;
    先按照a,b,c分组一次,查询结果再依次减去一个列,进行分组,顺序为:
    1:abc,2:ab,3:a,4:整张表为1组。分n+1次

    MySQL采用的是WITH ROLLUP语句,注意的是,oracle可以使用ORDER BY进行排序,而MySQl不能再用ORDER BY语句了,它会自动排序,但是顺序不满意的话就只能在程序中解决。

    CUBE

    GROUP BY CUBE(a, b, c)
    对cube的每个参数,都可以理解为取值为参与分组和不参与分组两个值的一个维度,所有维度取值组合的集合就是分组后的集合
    对于n个参数的cube ,有2^n次分组
    GROUP BY CUBE(a,b,c),首先对(a,b,c)进行GROUP BY,
    然后依次是(a,b), (a,c), (a), (b,c), (b), (c),最后对
    全表进行GROUP BY操作,一共是2八3=8次分组;

    MySQL暂时只定义了CUBE,还不能支持CUBE操作。

    GROUPING SETS

    如果不需要获得由完备的ROLLUP或CUBE运算符生成的全部分组,则可以使用GROUPING SETS仅指定所需的分组;
    GROUPING SETS列表可以包含重复的分组。

    集合操作

    为了合并多个SELECT语句的结果,可以使用集合操作符,实现集合的并、交、差;
    集合操作符包括UNION、UNION ALL、INTERSECT、MINUS;
    多条作集合操作的SELECT语句的列的个数和数据类型必须匹配。
    INTERSECT、MINUS仅ORACLE才有,MySQL需要自己实现。

    相关文章

      网友评论

        本文标题:排序函数、高级分组函数以及集合操作

        本文链接:https://www.haomeiwen.com/subject/auywoxtx.html