sql >> Databasteknik >  >> RDS >> Oracle

Använd COUNT-funktionen på en undergrupp av grupper

Nej, inget behov av analytiska funktioner; de är ändå svåra att ha i samma fråga som en aggregerad funktion.

Du letar efter case uttalandet igen, du behöver bara lägga det i 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

Observera att jag har ändrat ditt count(case when...) till sum() . Detta beror på att du använder en boolesk 1/0 så detta kommer att fungera på samma sätt men det är mycket renare.

Av samma anledning har jag ignorerat ditt between i din löneberäkning; det finns inget särskilt behov av det som om lönen är högre än 2000, det första fallet har redan uppfyllts.




  1. Haversine Fomula med MySQL få närliggande platser

  2. Viloläge skapar automatisk databas

  3. Ordna kolumnerna i MySql-tabellen med Python

  4. VÄNSTER YTTRE JOIN med villkor (var, beställ efter)?