CASE-lausekkeet ja pivot-kyselyt
Käyttäkää CASE WHEN -rakennetta aggregointien sisällä muuntaaksenne pitkät taulut leveiksi ristiintaulukoiduiksi raporteiksi.
CASE-lausekkeet ja pivot-kyselyt on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.
CASE: SQL:n sisäinen if/else
CASE on SQL:n ternary-rakenne. Sillä on kaksi muotoa:
-- Searched CASE
CASE WHEN x > 0 THEN 'positive'
WHEN x < 0 THEN 'negative'
ELSE 'zero' END
-- Simple CASE
CASE status
WHEN 'A' THEN 'active'
WHEN 'P' THEN 'pending'
ELSE 'unknown'
ENDCASE SELECT-lauseessa
Laske johdettu sarake:
SELECT id, total,
CASE
WHEN total >= 1000 THEN 'whale'
WHEN total >= 100 THEN 'regular'
ELSE 'small'
END AS bucket
FROM orders;CASE WHERE- ja ORDER BY -lausekkeissa
Mukautettu suodatus ja järjestäminen:
-- Custom sort:
ORDER BY
CASE WHEN status = 'urgent' THEN 0 ELSE 1 END,
created_at DESC;
-- Conditional filter:
WHERE CASE WHEN $1 = 'paid' THEN status = 'paid'
ELSE status IN ('pending','paid')
END;CASE aggregaattifunktioiden sisällä: ehdolliset lukumäärät
Klassinen pivotointikikka:
SELECT user_id,
COUNT(*) AS total,
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending,
SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY user_id;FILTER: selkeämpi vaihtoehto
PostgreSQL:n FILTER-lauseke on luettavampi:
SELECT user_id,
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'paid') AS paid,
COUNT(*) FILTER (WHERE status = 'pending') AS pending,
COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled
FROM orders
GROUP BY user_id;Kuukausien pivotointi sarakkeiksi
Muuntakaa pitkä esitysmuoto leveäksi CASE-lausekkeen ja aggregaattifunktion avulla:
SELECT year,
SUM(CASE WHEN month = 1 THEN revenue END) AS jan,
SUM(CASE WHEN month = 2 THEN revenue END) AS feb,
-- ...
SUM(CASE WHEN month = 12 THEN revenue END) AS dec
FROM monthly_revenue
GROUP BY year
ORDER BY year;Luokkien pivotointi
Yksi rivi käyttäjää kohden ja yksi sarake tilaa kohden:
SELECT user_id,
SUM(total) FILTER (WHERE status = 'paid') AS paid_total,
SUM(total) FILTER (WHERE status = 'pending') AS pending_total
FROM orders GROUP BY user_id;CASE-pivotointien rajoitukset
Kohdesarakkeet on tunnettava jo kyselyä kirjoitettaessa. Dynaamisia pivotointeja varten muodostakaa SQL sovelluksessa tai käyttäkää proseduraalista PL/pgSQL:ää.
CASE vs COALESCE / NULLIF
COALESCE = "ensimmäinen ei-NULL-arvo". NULLIF = "NULL, jos arvot ovat yhtäsuuret". CASE on yleiskäyttöisempi — käyttäkää sitä, kun COALESCE tai NULLIF ei sovellu.
Tyyppien yhteensopivuus
Kaikkien CASE-haarojen on palautettava yhteensopivat tyypit. Muuntakaa tyypit eksplisiittisesti, jos yhdistätte eri tyyppejä:
SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;Sisäkkäinen CASE
Monitasoinen haarautuminen:
SELECT CASE
WHEN amount IS NULL THEN 'no payment'
WHEN amount = 0 THEN 'free'
WHEN amount < 10 THEN 'cheap'
ELSE
CASE WHEN paid_at IS NULL THEN 'overdue' ELSE 'paid' END
END AS status FROM invoices;Kertaus
CASE on SQL:n yleiskäyttöinen "if/else"-rakenne.
- SELECT-lauseen lasketut sarakkeet
- Pivotoinnit CASE-aggregaattifunktion tai FILTER-lausekkeen avulla
- Mukautettu WHERE- ja ORDER BY -logiikka
Pikatarkistus
Mikä lauseke on PostgreSQL:ssä luettavin vaihtoehto ehdolliseen aggregointiin?
Opi SQL tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 46
- Oppitunnit
- 183
Usein kysytyt kysymykset
Onko oppitunti ”CASE-lausekkeet ja pivot-kyselyt” ilmainen?
Kyllä – oppitunnin ”CASE-lausekkeet ja pivot-kyselyt” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”CASE-lausekkeet ja pivot-kyselyt”?
Käyttäkää CASE WHEN -rakennetta aggregointien sisällä muuntaaksenne pitkät taulut leveiksi ristiintaulukoiduiksi raporteiksi. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”CASE-lausekkeet ja pivot-kyselyt”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?
Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- UNION, INTERSECT, EXCEPT
- UNION ALL vs UNION (kaksoiskappaleiden poiston kustannus)
- CASE-lausekkeet ja pivot-kyselyt
- Ristiintaulukointimallit (PostgreSQL crosstab())