PostgreSQLis saab kokkuvõttefunktsioonidega (nt Count, Min, Max, Sum, Avg) koos kasutada FILTER klauslit, et piirata ridu, mis lähevad kokkuvõttefunktsiooni tulemuse arvutamisel sisendiks. See võimaldab ühe ja sama lausega küsida samast tabelist koondtulemusi erinevatele tingimustele vastavate ridade põhjal.
Oletame, et SQL-andmebaasis on tabel Hotell:
Hotell(hotelli_nr, nimi, linn)
Primaarvõti(hotelli_nr)
Ülesandeks oleks leida sama lausega Tallinnas olevate hotellide arv ja Tartus olevate hotellide arv.
PostgreSQL
Alternatiivsed lahendused põhinevad Count funktsiooni omadusel, et Count(<avaldis>) loendab vaid ridu, kus avaldise arvutamise tulemus ei ole NULL.
MS Access
iif funktsioonil on kolm parameetrit -
Kasutatakse CASE avaldist.
Oletame, et SQL-andmebaasis on tabel Hotell:
Hotell(hotelli_nr, nimi, linn)
Primaarvõti(hotelli_nr)
Ülesandeks oleks leida sama lausega Tallinnas olevate hotellide arv ja Tartus olevate hotellide arv.
PostgreSQL
SELECT Count(*) FILTER (WHERE linn='Tallinn') AS tallinna_hotellide_arv,
Count(*) FILTER (WHERE linn='Tartu') AS tartu_hotellide_arv
FROM Hotell;
Alternatiivsed lahendused põhinevad Count funktsiooni omadusel, et Count(<avaldis>) loendab vaid ridu, kus avaldise arvutamise tulemus ei ole NULL.
MS Access
SELECT Count(iif(linn='Tallinn',linn,NULL)) AS tallinna_hotellide_arv,
Count(iif(linn='Tartu',linn,NULL)) AS tartu_hotellide_arv
FROM Hotell;
iif funktsioonil on kolm parameetrit -
- esimese oodatav väärtus on kontrollitav tingimus,
- teise oodatav väärtus on funktsiooni tulemus, kui tingimuse kontrolli tulemus on TRUE,
- kolmanda oodatav väärtus on funktsiooni tulemus, kui tingimuse kontrolli tulemus on FALSE.
SELECT Count(CASE WHEN linn='Tallinn' THEN linn ELSE NULL END) AS tallinna_hotellide_arv,
Count(CASE WHEN linn='Tartu' THEN linn ELSE NULL END) AS tartu_hotellide_arv
FROM Hotell;
Kasutatakse CASE avaldist.
Hinda postitust:
Keskmine hinne : Pole veel hinnanguid!