Tidak, tidak perlu fungsi analitik; mereka sulit untuk memiliki kueri yang sama dengan fungsi agregat.
Anda sedang mencari case
pernyataan lagi, Anda hanya perlu memasukkannya ke dalam 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
Perhatikan bahwa saya telah mengubah count(case when...)
. Anda ke sum()
. Ini karena Anda menggunakan boolean 1/0 jadi ini akan bekerja dengan cara yang sama tetapi jauh lebih bersih.
Untuk alasan yang sama, saya mengabaikan between
Anda dalam perhitungan gaji Anda; tidak ada keperluan khusus karena jika gaji lebih besar dari 2000 KASUS pertama sudah terpenuhi.