Агрегирование для разных условий - PullRequest
0 голосов
/ 15 января 2020

У меня есть окно удовольствия c, как показано ниже:

select d.Name as Department, a. Name as Employee, a.sum(salary) 
from ( select e.*, dense_rank() over (partition by DepartmentId order by Salary desc) as DeptPayRank 
from Employee e 
) a 
join Department d
on a. DepartmentId = d. Id 
where DeptPayRank =1 
group by 1,2

Если я также хочу взять минимум всей зарплаты, DepPayRank = 3 я могу добавить к этому запросу или это невозможно?

1 Ответ

0 голосов
/ 15 января 2020

Тест:

SELECT d.Name AS Department, 
       a.Name AS Employee, 
       SUM(CASE WHEN DeptPayRank = 1 THEN salary END),
       MIN(CASE WHEN DeptPayRank = 3 THEN salary END)
FROM ( SELECT e.*, 
       DENSE_RANK() OVER (PARTITION BY DepartmentId ORDER BY Salary DESC) AS DeptPayRank 
       from Employee e 
     ) a 
JOIN Department d ON a.DepartmentId = d.Id 
GROUP BY 1,2
/* HAVING COUNT(CASE WHEN DeptPayRank = 1 THEN 1 END) > 0 */
...