首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle:对聚合函数应用条件,而不是对SQL语句的所有行应用条件

Oracle:对聚合函数应用条件,而不是对SQL语句的所有行应用条件
EN

Stack Overflow用户
提问于 2018-04-06 09:07:54
回答 1查看 61关注 0票数 1

我想为Oracle表计算select语句的最大值,它不是基于查询返回的所有行,而是基于这些行子集上的条件。

我将尝试用一个例子来更好地解释:

代码语言:javascript
复制
ID | NAME | AGE | COMPANY
 1 | Alex | 28  | A
 2 | Alan | 22  | A
 3 | Bob  | 21  | B
 4 | Carl | 20  | C 
 5 | Dave | 24  | C
 6 | Eric | 26  | C
 7 | Matt | 33  | D

我想为每一家25岁以下的公司获得最高年龄,但我也想计算每一家公司的总人数。所以,我想要这个结果:

代码语言:javascript
复制
COMPANY | DEPENDENTS |  MAX_UNDER_25
   A    |     2      |      22
   B    |     1      |      21
   C    |     3      |      24
   D    |     1      |    (null)

如何使用单个SQL查询获得此结果,而不加入记录和的精化和条件的最大值的其他精化操作?

我想避免这种选择:

代码语言:javascript
复制
SELECT R1.COMPANY, R1.DEPENDENTS, R2.MAX_UNDER_25 FROM
(SELECT COMPANY, COUNT(*) DEPENDENTS FROM TABLE
GROUP BY COMPANY) R1
LEFT JOIN
(SELECT COMPANY, MAX(AGE) MAX_UNDER_25 FROM TABLE
WHERE AGE < 25
GROUP BY COMPANY) R2
ON R1.COMPANY = R2.COMPANY;

可以通过一个更简单的查询来获得这个结果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-06 09:16:55

在聚合case时只需使用MAX表达式

代码语言:javascript
复制
select company, count(*), max(case when age < 25 then age end)
from table
group by company
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49689241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档