我想为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岁以下的公司获得最高年龄,但我也想计算每一家公司的总人数。所以,我想要这个结果:
COMPANY | DEPENDENTS | MAX_UNDER_25
A | 2 | 22
B | 1 | 21
C | 3 | 24
D | 1 | (null)如何使用单个SQL查询获得此结果,而不加入记录和的精化和条件的最大值的其他精化操作?
我想避免这种选择:
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;可以通过一个更简单的查询来获得这个结果吗?
发布于 2018-04-06 09:16:55
在聚合case时只需使用MAX表达式
select company, count(*), max(case when age < 25 then age end)
from table
group by companyhttps://stackoverflow.com/questions/49689241
复制相似问题