PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Część 2:jak uzyskać sumę zapytania opartego na partycji bez faktycznego obracania?

Użyj rozwiązania, które posiadasz (jako jedno, wolę rozwiązanie tablicowe z oczywistych powodów), umieść je w CTE, a następnie użyj UNION do obliczenia sum:

with students as (
  select studentnr, 
         name, 
         gradenumber, 
         languages[1] as language_1,
         languages[2] as language_2,
         languages[3] as language_3,
         languages[4] as language_4,
         languages[5] as language_5
  FROM (       
    SELECT s.studentnumber as studentnr, 
           p.firstname AS name,
           sl.gradenumber as gradenumber,
           array_agg(DISTINCT l.text) as languages
    FROM student s
        JOIN pupil p ON p.id = s.pupilid    
        JOIN pupillanguage pl on pl.pupilid = p.id
        JOIN language l on l.id = pl.languageid
        JOIN schoollevel sl ON sl.id = p.schoollevelid
    GROUP BY s.studentnumber, p.firstname
  ) t
)
select *
from students
union all
select null as studentnr,
       null as name, 
       null as gradenumber, 
       count(language_1)::text,
       count(language_2)::text, 
       count(language_3)::text, 
       count(language_4)::text, 
       count(language_5)::text
from students;

Funkcje agregujące, takie jak count() ignoruj ​​NULL wartości, więc zlicza tylko wiersze, w których istnieje język.

Typy danych wszystkich kolumn w zapytaniach UNION muszą być zgodne, więc nie można zwrócić wartości całkowitych w kolumnie w drugim zapytaniu, jeśli pierwsze zapytanie definiuje tę kolumnę jako tekst (lub varchar). Dlatego wynik count() musi być rzutowany na text

Aliasy kolumn w drugim zapytaniu nie są tak naprawdę potrzebne, ale dodałem je, aby pokazać, jak listy kolumn muszą się zgadzać




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie znaleziono odpowiedniego sterownika po dołączeniu potrzebnych sterowników do wtyczki maven-assembly-plugin

  2. Postgres BŁĄD:nie można otworzyć pliku do odczytu:Odmowa uprawnień

  3. wyodrębnij datę ze znacznika czasu w postgreSQL

  4. Pobierz wiersze na podstawie warunku

  5. SQL dwa kryteria z jednego group-by