Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zastosuj funkcję ILE.LICZB na podgrupie grup

Nie, nie ma potrzeby wykonywania funkcji analitycznych; i tak trudno je mieć w tym samym zapytaniu, co funkcja agregująca.

Szukasz case oświadczenie ponownie, wystarczy umieścić je w GRUPIE WG.

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

Zwróć uwagę, że zmieniłem Twoje count(case when...) do sum() . Dzieje się tak dlatego, że używasz wartości logicznej 1/0, więc to będzie działać w ten sam sposób, ale jest znacznie czystsze.

Z tego samego powodu zignorowałem twoje between w kalkulacji wynagrodzenia; nie ma szczególnej potrzeby, ponieważ jeśli pensja jest wyższa niż 2000, pierwszy PRZYPADEK został już zrealizowany.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz wartość drugiej kolumny, jeśli wartość pierwszej kolumny jest taka sama

  2. .Net - Tworzenie zestawu rekordów na żądanie zamiast ściągania wszystkiego na raz do pamięci

  3. liczyć z dołącz

  4. Migracja danych z Oracle do SQL Server

  5. Błąd (ORA-00923:słowo kluczowe FROM nie zostało znalezione w oczekiwanym miejscu)