sql >> Database >  >> RDS >> Oracle

COUNT-functie toepassen op een subgroep van groepen

Nee, analytische functies zijn niet nodig; ze zijn sowieso moeilijk in dezelfde query te hebben als een aggregatiefunctie.

U zoekt de case statement opnieuw, je hoeft het alleen maar in de GROUP BY te zetten.

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

Merk op dat ik je count(case when...) . heb gewijzigd naar sum() . Dit komt omdat je een boolean 1/0 gebruikt, dus dit werkt op dezelfde manier, maar het is een stuk overzichtelijker.

Om dezelfde reden heb ik je between . genegeerd in uw salarisberekening; er is geen specifieke behoefte aan, alsof het salaris hoger is dan 2000, de eerste CASE al is vervuld.




  1. Aangepast type in slaapstand om te voorkomen 'Veroorzaakt door:java.sql.SQLException:Stream is al gesloten'

  2. Cross-databasequery's, voegt voordelen en nadelen toe

  3. MySQL KOLOM TOEVOEGEN

  4. Dynamische partitionering + CREATE AS op HIVE