Không, không cần hàm phân tích; Dù sao thì chúng cũng khó có cùng một truy vấn như một hàm tổng hợp.
Bạn đang tìm case
một lần nữa, bạn chỉ cần đặt nó vào GROUP BY.
select hire_year
, sum(married) as married
, sum(certified) as certified
, sum(religious) as religious
, case when salary > 2000 then 'A'
when salary >= 1000 then 'B'
else 'C' end as salary_class
from employees
group by hire_year
, case when salary > 2000 then 'A'
when salary >= 1000 then 'B'
else 'C' end
Lưu ý rằng tôi đã thay đổi số lượng count(case when...)
thành sum()
. Điều này là do bạn đang sử dụng boolean 1/0 nên điều này sẽ hoạt động theo cách tương tự nhưng nó gọn gàng hơn rất nhiều.
Vì lý do tương tự, tôi đã bỏ qua between
trong cách tính lương của bạn; không có nhu cầu cụ thể cho nó vì nếu mức lương lớn hơn 2000 thì CASE đầu tiên đã được hoàn thành.