zoukankan      html  css  js  c++  java
  • ran()与over()用法实例

      

       

    创建一个test表,并插入6条数据。
    CREATE TABLE test
    (
    	a INT,
    	b INT,
    	c CHAR
    )
    INSERT INTO test VALUES(1,3,'E')
    INSERT INTO test VALUES(2,4,'A')
    INSERT INTO test VALUES(3,2,'D')
    INSERT INTO test VALUES(3,5,'B')
    INSERT INTO test VALUES(4,2,'C')
    INSERT INTO test VALUES(2,4,'B')

     

     

    SELECT * from test

     

     

    a           b           c
    ----------- ----------- ----
    1           3           E
    2           4           A
    3           2           D
    3           5           B
    4           2           C
    2           4           B

    (6 行受影响)

    1、整个结果集是一个分组,以a进行排名

    SELECT a,b,c,rank () OVER (ORDER BY a) rank FROM test

     

     

    a           b           c    rank
    ----------- ----------- ---- --------------------
    1           3           E    1
    2           4           A    2
    2           4           B    2
    3           2           D    4
    3           5           B    4
    4           2           C    6

    (6 行受影响)

    2、整个结果集是一个分组,以b进行排名

    SELECT a,b,c,rank () OVER (ORDER BY b) rank FROM test

     

     

    a           b           c    rank
    ----------- ----------- ---- --------------------
    3           2           D    1
    4           2           C    1
    1           3           E    3
    2           4           A    4
    2           4           B    4
    3           5           B    6

    (6 行受影响)

    3、以a,b进行分组,在每个组内以b进行排名。分了5个组,第2行跟第3行是一个组,其他的每行是一个组。在第2行与第3行的组内以b排名,并列为1

    SELECT a,b,c,rank () OVER (PARTITION BY a,b ORDER BY b) rank FROM test

     

    a           b           c    rank
    ----------- ----------- ---- --------------------
    1           3           E    1
    2           4           A    1
    2           4           B    1
    3           2           D    1
    3           5           B    1
    4           2           C    1

    (6 行受影响)

    4、以a,b进行分组,在每个组内以c进行排名。分了5个组,第2行跟第3行是一个组,其他的每行是一个组。在第2行与第3行的组内以c排名,由于c列一个是A,一个是B,所以Rank分别为1、2。

    SELECT a,b,c,rank () OVER (PARTITION BY a,b ORDER BY c) rank FROM test

     

     

    a           b           c    rank
    ----------- ----------- ---- --------------------
    1           3           E    1
    2           4           A    1
    2           4           B    2
    3           2           D    1
    3           5           B    1
    4           2           C    1

    (6 行受影响)

    总结:1、partition  by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组。

    2、Rank 是在每个分组内部进行排名的。

    Technorati 标签: rank over,partition,sql

     

  • 相关阅读:
    NX二次开发-UFUN获取系统相关信息UF_ask_system_info
    NX二次开发-UFUN设置环境变量UF_set_variable
    NX二次开发-UFUN获取环境变量路径,将环境变量转换为字符串,字符串拼接UF_translate_variable
    NX二次开发-UFUN终止UF_terminate
    NX二次开发-UFUN计时函数UF_begin_timer
    NX二次开发-获取WCS标识UF_CSYS_ask_wcs
    NX二次开发-UFUN将工程图转成CGM和PDF文件UF_CGM_export_cgm
    require.js简单入门
    【转】JS中的call()和apply()方法
    C# Enum枚举类型操作扩展类
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/1783221.html
Copyright © 2011-2022 走看看