zoukankan      html  css  js  c++  java
  • Oracle分析函数

    最近在工作中遇到一个SQL问题,就是需要在GROUP BY之后,取第一条记录,而不是MAX,MIN,这么简单的筛选。

    感谢我的同事lhqmccn,帮我解决这个问题。

    我们都知道,MAX,MIN,COUNT,SUM等属于聚合函数,其实Oracle还提供另外一种函数,分析函数

    下面是例子:按CLASS分组后,取VALUE最大的记录所对应的NAME。

    主要是这句:MAX(NAME) KEEP(DENSE_RANK FIRST ORDER BY VALUE DESC)

    WITH t AS
    (SELECT 1 CLASS, 2 VALUE, 'a' NAME
        FROM dual
      UNION ALL
      SELECT 1 CLASS, 1 VALUE, 'b' NAME
        FROM dual
      UNION ALL
      SELECT 1 CLASS, 3 VALUE, 'c' NAME
        FROM dual
      UNION ALL
      SELECT 2 CLASS, 1 VALUE, 'd' NAME
        FROM dual
      UNION ALL
      SELECT 2 CLASS, 2 VALUE, 'e' NAME
        FROM dual
      UNION ALL
      SELECT 2 CLASS, 3 VALUE, 'f' NAME FROM dual)
    SELECT CLASS,MAX(VALUE),MAX(NAME) KEEP(DENSE_RANK FIRST ORDER BY VALUE DESC)
      FROM t
    GROUP BY CLASS;

    分析函数种类众多,而且功能强大,我只是应用了满足我这个需求的一种,请大家自行Google学习。

    P.S. 除了Oracle外,SQL Server和Postgresql也支持分析函数。

  • 相关阅读:
    Java_File类
    Java_Math类和Random类
    Java_包装类
    Java_Stringbuilder和StringBuffer
    Java_String
    Java_数组, 懒得整理了 ---------------------> 未完, 待续
    Java_内部类
    Java_三大特征相关
    Java_垃圾回收机制(未掌握)
    重载(overload)和重写(override)的区别?
  • 原文地址:https://www.cnblogs.com/eshizhan/p/3616805.html
Copyright © 2011-2022 走看看