zoukankan      html  css  js  c++  java
  • ORACLE中的KEEP()使用方法

    转载至:http://blog.csdn.net/aqszhuaihuai/article/details/6434160

    ==============================================

    2种取值:
    DENSE_RANK FIRST 
    DENSE_RANK LAST

    SQL> select * from test;

    ID MC SL
    -------------------- -------------------- -------------------
    1 111 1
    1 222 1
    1 333 2
    1 555 3
    1 666 3
    2 111 1
    2 222 1
    2 333 2
    2 555 2

    9 rows selected

    SQL> 
    SQL> select id,mc,sl,
    2 min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id),
    3 max(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id)
    4 from test
    5 ;

    ID MC SL MIN(MC)KEEP(DENSE_RANKFIRSTORD MAX(MC)KEEP(DENSE_RANKLASTORDE
    -------------------- -------------------- ------------------- ------------------------------ ------------------------------
    1 111 1 111 666
    1 222 1 111 666
    1 333 2 111 666
    1 555 3 111 666
    1 666 3 111 666
    2 111 1 111 555
    2 222 1 111 555
    2 333 2 111 555
    2 555 2 111 555

    9 rows selected

    SQL>

    不要混淆keep内(first、last)外(min、max或者其他):
    min是可以对应last的
    max是可以对应first的
    SQL> select id,mc,sl,
    2 min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id),
    3 max(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id),
    4 min(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id),
    5 max(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id)
    6 from test
    7 ;

    ID MC SL MIN(MC)KEEP(DENSE_RANKFIRSTORD MAX(MC)KEEP(DENSE_RANKFIRSTORD MIN(MC)KEEP(DENSE_RANKLASTORDE MAX(MC)KEEP(DENSE_RANKLASTORDE
    -------------------- -------------------- ------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------
    1 111 1 111 222 555 666
    1 222 1 111 222 555 666
    1 333 2 111 222 555 666
    1 555 3 111 222 555 666
    1 666 3 111 222 555 666

    2 111 1 111 222 333 555
    2 222 1 111 222 333 555
    2 333 2 111 222 333 555
    2 555 2 111 222 333 555

    对于id=1的结果集进行一下解释
    min(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id):id等于1的数量最小的(DENSE_RANK first )为
    1 111 1 
    1 222 1 
    在这个结果中取min(mc) 就是111
    max(mc) keep (DENSE_RANK first ORDER BY sl) over(partition by id)
    max(mc) 就是222;
    min(mc) keep (DENSE_RANK last ORDER BY sl) over(partition by id):id等于1的数量最大的(DENSE_RANK first )为
    1 555 3 
    1 666 3

    在这个结果中取min(mc) 就是555,取max(mc)就是666

    id=2的结果集同理

  • 相关阅读:
    LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)
    LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)
    LeetCode 1037. Valid Boomerang (有效的回旋镖)
    LeetCode 1108. Defanging an IP Address (IP 地址无效化)
    LeetCode 704. Binary Search (二分查找)
    LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)
    LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)
    LeetCode 817. Linked List Components (链表组件)
    LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/wllcs/p/6178192.html
Copyright © 2011-2022 走看看