Oracle
 sql >> Database >  >> RDS >> Oracle

Applicare la funzione COUNT su un sottogruppo di gruppi

No, non c'è bisogno di funzioni analitiche; sono comunque difficili da avere nella stessa query di una funzione aggregata.

Stai cercando il case di nuovo, devi solo inserirlo nel 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

Nota che ho cambiato il tuo count(case when...) a sum() . Questo perché stai usando un booleano 1/0, quindi funzionerà allo stesso modo ma è molto più pulito.

Per lo stesso motivo ho ignorato il tuo between nel calcolo dello stipendio; non ce n'è bisogno in particolare come se lo stipendio fosse maggiore di 2000 il primo CASE è già stato adempiuto.