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

     

  • 相关阅读:
    java异常笔记
    CORBA IOR学习
    CORBA GIOP消息格式学习
    一个简单的CORBA例子
    Chrome 调试动态加载的js
    Android高效加载大图、多图解决方案,有效避免程序OOM(转)
    安卓开发笔记——打造万能适配器(Adapter)
    安卓开发笔记——个性化TextView(新浪微博)
    安卓开发笔记——关于Handler的一些总结(上)
    安卓开发笔记——关于AsyncTask的使用
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/1783221.html
Copyright © 2011-2022 走看看