【问题标题】:Oracle - not single group funcOracle - 不是单组功能
【发布时间】:2016-10-15 21:08:21
【问题描述】:

我有桌子:

table blah:  
| name | nmb |
+------+-----+
| andy | 10  |
| alice|  5  |
| carol|  9  |

select name,MAX(nmb) from blah;

不是单组群功能,
如何获得如下输出:

| name | nmb |
+------+-----+
| andy | 10  |

谁能指引正确的方向?

【问题讨论】:

标签: sql oracle


【解决方案1】:
SELECT MAX( name ) KEEP ( DENSE_RANK LAST ORDER BY nmb ) AS name,
       MAX( nmb ) AS nmb
FROM   blah

SELECT *
FROM   (
  SELECT *
  FROM   blah
  ORDER BY nmb DESC
)
WHERE ROWNUM = 1

【讨论】:

    【解决方案2】:

    您忘记了group by 子句

    select name, MAX(nmb) from blah group by name;
    

    但它不会给你你期望的结果。事实上,它会返回与您在桌子上的结果相同的结果。

    table blah:
    | name | nmb |
    | andy | 10  |
    | alice|  5  |
    | carol|  9  |
    

    这是因为它将按列 name 对值进行分组,因为没有重复的名称,它将向您显示所有注册表。

    如果您只想获得具有更大nmb 的名称,则必须添加一个 where 子句和一个子查询才能仅获得一个这样的注册表:

    select name, nmb
      from (select name, MAX(nmb) as nmb
              from blah
             group by name
            order by MAX(nmb) desc) as t
     where rownum = 1
    

    【讨论】:

    • 你刷新过这个页面了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2021-12-20
    • 2020-08-14
    相关资源
    最近更新 更多