CASE-udtryk og pivotforespørgsler
Brug CASE WHEN i aggregater til at omdanne lange tabeller til brede krydstabeller.
CASE-udtryk og pivotforespørgsler er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.
CASE: Indlejret hvis/ellers i SQL
CASE er SQL's ternære operator. Der er to former:
-- 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 i SELECT
Beregn en afledt kolonne:
SELECT id, total,
CASE
WHEN total >= 1000 THEN 'whale'
WHEN total >= 100 THEN 'regular'
ELSE 'small'
END AS bucket
FROM orders;CASE i WHERE og ORDER BY
Tilpasset filtrering og sortering:
-- 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 i aggregater: betingede optællinger
Det klassiske pivoteringstrick:
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: Et renere alternativ
PostgreSQL's FILTER-klausul er mere læsevenlig:
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;Pivotering af måneder på tværs af kolonner
Konvertér fra langt format til bredt format med CASE + aggregat:
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;Pivotering af kategorier
Én række pr. bruger, én kolonne pr. status:
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;Begrænsninger ved CASE-pivotering
Du skal kende målkolonnerne, når du skriver forespørgslen. Ved dynamisk pivotering kan du generere SQL i applikationen eller bruge procedurebaseret PL/pgSQL.
CASE vs COALESCE / NULLIF
COALESCE = "første værdi, der ikke er NULL". NULLIF = "NULL hvis ens". CASE er mere generel — brug den, når COALESCE/NULLIF ikke passer.
Typ kompatibilitet
Alle CASE-grene skal give kompatible typer. Konvertér typer eksplicit, hvis du blander typer:
SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;Indlejret CASE
Forgrening i flere niveauer:
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;Opsummering
CASE er SQL's universelle "hvis/ellers".
- Beregnede kolonner med SELECT
- Pivotering via CASE i aggregater eller FILTER
- Tilpasset logik i WHERE / ORDER BY
Hurtigt tjek
Hvilken klausul er mest læsevenlig til betinget aggregering i PostgreSQL?
Lær SQL med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 46
- Lektioner
- 183
Ofte stillede spørgsmål
Er lektionen “CASE-udtryk og pivotforespørgsler” gratis?
Ja — hele teksten til “CASE-udtryk og pivotforespørgsler” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “CASE-udtryk og pivotforespørgsler”?
Brug CASE WHEN i aggregater til at omdanne lange tabeller til brede krydstabeller. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på SQL Academy?
Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “CASE-udtryk og pivotforespørgsler”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne SQL Academy-lektion?
Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- UNION, INTERSECT, EXCEPT
- UNION ALL kontra UNION (omkostninger ved deduplikering)
- CASE-udtryk og pivotforespørgsler
- Crosstab-mønstre (PostgreSQL crosstab())