Oracle:将条件应用于聚合函数,而不是SQL语句的所有行
我想为Oracle表计算select语句中的最大值,它不是基于查询返回的所有行,而是基于这些行的子集上的条件 我将尝试用一个例子更好地解释:Oracle:将条件应用于聚合函数,而不是SQL语句的所有行,sql,oracle,aggregate-functions,Sql,Oracle,Aggregate Functions,我想为Oracle表计算select语句中的最大值,它不是基于查询返回的所有行,而是基于这些行的子集上的条件 我将尝试用一个例子更好地解释: 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岁以下
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岁以下公司的最大年龄,但我还想计算每个公司的总人数。
所以,我想要这个结果:
COMPANY | DEPENDENTS | MAX_UNDER_25
A | 2 | 22
B | 1 | 21
C | 3 | 24
D | 1 | (null)
我如何通过一个SQL查询获得这个结果,而不加入记录和的精化和max with条件的精化
我想避免这种选择:
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;
通过一个更简单的查询就可以得到它?在聚合MAX时只需使用case表达式:
聚合最大值时,只需使用大小写表达式:
将7,Matt,33,D添加到样本数据中,并相应调整预期结果。我已对样本数据编辑了itAdd 7,Matt,33,D,并相应调整了预期结果。我已对其进行了编辑,因此它只需要应用案例条件?我不知道那个把戏。。。我马上试试,我会检查的@亚历山德罗克:什么把戏?你不知道“case”表达式吗?@AlessandroC我以前从未用过这样的case表达式,所以它只需要应用case条件?我不知道那个把戏。。。我马上试试,我会检查的@亚历山德罗克:什么把戏?你不知道“case”这个词吗?@AlessandroC我以前从来没有用过这样的case词
select company, count(*), max(case when age < 25 then age end)
from table
group by company