Case i MySQL: 11 praktiske eksempler

Siste oppdatering: May 25 2025
Forfatter: TecnoDigital
  • CASE-funksjonen i MySQL lar deg utføre betingede evalueringer og returnere tilpassede resultater.
  • Flere betingelser kan brukes med WHEN-klausulen, og nullverdier kan håndteres med ELSE.
  • CASE kan kombineres med aggregeringsfunksjoner for å optimalisere spørringer.
  • Å følge beste praksis når du bruker CASE er viktig for å opprettholde kodens ytelse og lesbarhet.
Sak i Mysql

CASE-funksjonen i MySQL er et kraftig verktøy som lar deg utføre betingede operasjoner i spørringene dine. Med CASE kan du evaluere forskjellige forhold og returnere spesifikke resultater avhengig av om disse betingelsene er oppfylt eller ikke. Vi skal forklare denne funksjonen med praktiske eksempler som vil hjelpe deg å mestre bruken av CASE i MySQL og forbedre dine ferdigheter i databasebehandling.

Hva er CASE-funksjonen i MySQL?

CASE-funksjonen i MySQL er et betinget uttrykk som lar deg evaluere ulike betingelser og returnere spesifikke resultater avhengig av om disse betingelsene er oppfylt. Det er et veldig nyttig verktøy for å utføre logiske operasjoner i spørringene dine og få tilpassede resultater basert på spesifikke kriterier.

CASE fungerer på samme måte som en serie IF-THEN-ELSE-setninger, der du kan spesifisere flere betingelser og verdiene som skal returneres når disse betingelsene er oppfylt. Hvis ingen av betingelsene er oppfylt, kan du definere en standardverdi ved å bruke ELSE-leddet.

Grunnleggende CASE-syntaks i MySQL

Den grunnleggende syntaksen til CASE-funksjonen i MySQL er som følger:

CASE
    WHEN condición1 THEN resultado1
    WHEN condición2 THEN resultado2
    ...
    WHEN condiciónN THEN resultadoN
    ELSE resultado_predeterminado
END

Her er en forklaring av hver del av syntaksen:

  • WHEN: Spesifiserer tilstanden som skal evalueres.
  • THEN: Indikerer resultatet som vil bli returnert hvis den tilsvarende betingelsen er oppfylt.
  • ELSE: (Valgfritt) Angir resultatet som skal returneres hvis ingen av betingelsene ovenfor er oppfylt.
  • END: Markerer slutten på CASE-uttrykket.

Nå som du kjenner den grunnleggende syntaksen, la oss utforske noen praktiske eksempler!

Eksempel 1: Klassifiser elevene etter gjennomsnittet deres

Anta at du har en tabell kalt "studenter" med følgende kolonner: "id", "navn" og "avg". Du vil rangere studentene etter deres GPA ved å bruke CASE-funksjonen. Du kan gjøre det på denne måten:

SELECT nombre,
       CASE
           WHEN promedio >= 90 THEN 'Sobresaliente'
           WHEN promedio >= 80 THEN 'Notable'
           WHEN promedio >= 70 THEN 'Bien'
           WHEN promedio >= 60 THEN 'Suficiente'
           ELSE 'Insuficiente'
       END AS clasificacion
FROM estudiantes;

I dette eksemplet bruker vi CASE for å evaluere hver elevs gjennomsnitt og tildele en tilsvarende rangering. Hvis gjennomsnittet er større enn eller lik 90, klassifiseres det som "Utestående." Hvis den er mellom 80 og 89, er den klassifisert som "Bemerkelsesverdig" og så videre. Hvis gjennomsnittet er mindre enn 60, er det klassifisert som "Utilstrekkelig."

Eksempel 2: Tilordning av produktkategorier

Tenk deg at du har en tabell kalt "produkter" med kolonnene "id", "navn" og "pris". Du vil tilordne en kategori til hvert produkt basert på prisen ved å bruke CASE-funksjonen. Du kan gjøre det på denne måten:

SELECT nombre,
       CASE
           WHEN precio > 1000 THEN 'Premium'
           WHEN precio > 500 THEN 'Gama alta'
           WHEN precio > 100 THEN 'Gama media'
           ELSE 'Económico'
       END AS categoria
FROM productos;

I dette eksemplet bruker vi CASE til å evaluere prisen på hvert produkt og tilordne en tilsvarende kategori. Hvis prisen er høyere enn 1000, er den klassifisert som "Premium". Hvis den er mellom 500 og 1000, er den klassifisert som "High-End" og så videre. Hvis prisen er mindre enn eller lik 100, er den klassifisert som "Økonomisk".

Eksempel 3: Beregn rabatter basert på kjøpt kvantum

Anta at du har en tabell kalt "salg" med kolonnene "id", "produkt" og "antall". Du vil beregne rabatten som brukes på hvert salg basert på antallet kjøpte ved hjelp av CASE-funksjonen. Du kan gjøre det på denne måten:

SELECT producto,
       CASE
           WHEN cantidad >= 100 THEN 0.20
           WHEN cantidad >= 50 THEN 0.15
           WHEN cantidad >= 20 THEN 0.10
           ELSE 0
       END AS descuento
FROM ventas;

I dette eksemplet bruker vi CASE til å evaluere den kjøpte mengden av hvert produkt og beregne den tilsvarende rabatten. Hvis antallet er større enn eller lik 100, gis 20 % rabatt. Er den mellom 50 og 99 gis det 15 % rabatt, og så videre. Dersom antallet er mindre enn 20, gjelder ingen rabatt.

Eksempel 4: Konvertering av numeriske verdier til områder

Tenk deg at du har en tabell kalt "ansatte" med kolonnene "id", "navn" og "alder". Du vil konvertere ansattes alder til områder ved å bruke CASE-funksjonen. Du kan gjøre det på denne måten:

SELECT nombre,
       CASE
           WHEN edad >= 60 THEN 'Senior'
           WHEN edad >= 40 THEN 'Mediana edad'
           WHEN edad >= 20 THEN 'Joven'
           ELSE 'Menor de edad'
       END AS rango_edad
FROM empleados;

I dette eksemplet bruker vi CASE til å evaluere alderen til hver ansatt og tilordne et tilsvarende område. Hvis alderen er større enn eller lik 60 år, klassifiseres den som "Senior". Hvis du er mellom 40 og 59, blir du klassifisert som "middelaldrende" og så videre. Hvis alderen er under 20 år, er den klassifisert som "Minor".

  Bruk av å ha i MySQL: Den komplette veiledningen

Eksempel 5: Tilordning av etiketter basert på flere forhold

Anta at du har en tabell kalt "ordrer" med kolonnene "id", "kunde", "total" og "status". Du vil tilordne etiketter til hver ordre basert på dens total og status ved å bruke CASE-funksjonen med flere betingelser. Du kan gjøre det på denne måten:

SELECT cliente,
       CASE
           WHEN total > 1000 AND estado = 'Entregado' THEN 'VIP'
           WHEN total > 500 AND estado = 'Entregado' THEN 'Prioritario'
           WHEN estado = 'Pendiente' THEN 'En proceso'
           ELSE 'Regular'
       END AS etiqueta
FROM pedidos;

I dette eksemplet bruker vi CASE med flere betingelser for å evaluere både totalen og statusen til hver ordre og tildele en passende etikett. Hvis totalen er større enn 1000 og statusen er "Levert", er den merket som "VIP". Hvis totalen er større enn 500 og statusen er «Levert», merkes den som «Prioritet». Hvis statusen er "Venter", er den merket som "I prosess". Ellers er det merket som "Vanlig".

Eksempel 6: Håndtering av nullverdier med CASE

Tenk deg at du har en tabell kalt "kunder" med kolonnene "id", "navn" og "e-post". Noen kunder har kanskje ikke en e-post registrert, noe som vil resultere i nullverdier i "e-post"-kolonnen. Du kan bruke CASE-funksjonen til å håndtere disse nullverdiene på riktig måte. For eksempel:

SELECT nombre,
       CASE
           WHEN email IS NULL THEN 'Sin correo electrónico'
           ELSE email
       END AS informacion_contacto
FROM clientes;

I dette eksemplet bruker vi CASE for å vurdere om "e-post"-kolonnen er null. Hvis null, vises teksten "Ingen e-post". Ellers vises den faktiske verdien av "e-post"-kolonnen. Dette gjør at vi på en elegant måte kan håndtere saker der kontaktinformasjon mangler.

Eksempel 7: Kombiner CASE med aggregatfunksjoner

CASE-funksjonen kan også kombineres med aggregerte funksjoner som SUM, AVG, COUNT, etc. Anta at du har en tabell kalt "salg" med kolonnene "id", "produkt", "kvantitet" og "pris". Du ønsker å beregne totalt salg etter produktkategori ved å bruke CASE og SUM. Du kan gjøre det på denne måten:

SELECT
    SUM(CASE WHEN precio > 1000 THEN cantidad ELSE 0 END) AS ventas_premium,
    SUM(CASE WHEN precio <= 1000 THEN cantidad ELSE 0 END) AS ventas_regulares
FROM ventas;

I dette eksemplet bruker vi CASE inne i SUM-funksjonen for å beregne det totale salget etter produktkategori. Hvis prisen er større enn 1000,- legges beløpet til "premium_sales". Hvis prisen er mindre enn eller lik 1000, legges beløpet til "vanlig_salg". Dette gjør at vi kan få delsummer basert på spesifikke forhold.

Eksempel 8: Bruk av CASE i WHERE-klausuler

CASE-funksjonen kan også brukes i WHERE-leddet for å filtrere poster basert på spesifikke forhold. Anta at du har en tabell kalt "ansatte" med kolonnene "id", "navn", "avdeling" og "lønn". Du ønsker å målrette mot ansatte som har lønn over gjennomsnittet for deres avdeling. Du kan gjøre det på denne måten:

SELECT nombre, departamento, salario
FROM empleados
WHERE salario > (
    SELECT AVG(CASE WHEN e.departamento = empleados.departamento THEN e.salario ELSE NULL END)
    FROM empleados e
);

I dette eksemplet bruker vi CASE i underspørringen for å beregne gjennomsnittslønnen etter avdeling. Underspørringen sammenligner hver ansatts avdeling med den gjeldende avdelingen og tar kun hensyn til lønnen til ansatte i samme avdeling for å beregne gjennomsnittet. Deretter, i hovedspørringen, filtrerer vi ut ansatte hvis lønn er høyere enn gjennomsnittet beregnet for deres avdeling.

Eksempel 9: Generering av beregnede kolonner med CASE

CASE-funksjonen kan også brukes til å generere beregnede kolonner basert på spesifikke forhold. Anta at du har en tabell kalt "ordrer" med kolonnene "id", "kunde", "total" og "dato". Du vil opprette en ekstra kolonne kalt "rabatt" som bruker forskjellige rabattprosent avhengig av ordresummen. Du kan gjøre det på denne måten:

SELECT id, cliente, total,
       CASE
           WHEN total > 1000 THEN total * 0.10
           WHEN total > 500 THEN total * 0.05
           ELSE 0
       END AS descuento,
       fecha
FROM pedidos;

I dette eksemplet bruker vi CASE for å generere den beregnede "rabatt"-kolonnen. Hvis den totale bestillingen er større enn 1000, gis 10 % rabatt. Hvis totalsummen er større enn 500, gis 5 % rabatt. I alle andre tilfeller gjelder ingen rabatt. Denne beregnede kolonnen kan brukes til videre analyse eller for å vise tilleggsinformasjon i søkeresultatene.

  Komplett guide til datasletting: Metoder, rettigheter og sikkerhet

Eksempel 10: Implementering av kompleks logikk med nestede CASE-setninger

I noen tilfeller må du kanskje implementere mer kompleks betinget logikk ved å bruke nestede CASE-setninger. Anta at du har en tabell kalt "studenter" med kolonnene "id", "navn", "math_grade" og "language_grade". Du vil tilordne en kategori til hver elev basert på karakterene deres i matematikk og språk. Du kan gjøre det på denne måten:

SELECT nombre,
       CASE
           WHEN nota_matematicas >= 90 AND nota_lenguaje >= 90 THEN 'Excelente'
           WHEN nota_matematicas >= 80 AND nota_lenguaje >= 80 THEN 'Notable'
           ELSE
               CASE
                   WHEN nota_matematicas >= 70 OR nota_lenguaje >= 70 THEN 'Regular'
                   ELSE 'Necesita mejorar'
               END
       END AS categoria
FROM estudiantes;

I dette eksemplet bruker vi nestede CASE-setninger for å implementere mer kompleks betinget logikk. Først vurderer vi om både matte- og språkkarakterene er høyere enn eller lik 90. ​​I så fall tildeles kategorien "Utmerket". Deretter vurderer vi om begge karakterene er større enn eller lik 80. I så fall tildeles kategorien "Bemerkelsesverdig". Hvis ingen av betingelsene ovenfor er oppfylt, går vi til neste nivå av nestet CASE. Her vurderer vi om minst én av karakterene (matematikk eller språk) er større enn eller lik 70. I så fall tildeles kategorien «Vanlig». Hvis ingen av betingelsene er oppfylt, tildeles kategorien "Trenger forbedring".

Eksempel 11: Optimalisering av spørringer med CASE

CASE-funksjonen kan også brukes til å optimalisere spørringer og unngå flere separate spørringer. Anta at du har en tabell kalt "salg" med kolonnene "id", "produkt", "antall" og "dato". Du ønsker å få det totale salget per måned og det totale salget per år i ett enkelt søk. Du kan gjøre det på denne måten:

SELECT
    SUM(CASE WHEN MONTH(fecha) = 1 THEN cantidad ELSE 0 END) AS ventas_enero,
    SUM(CASE WHEN MONTH(fecha) = 2 THEN cantidad ELSE 0 END) AS ventas_febrero,
    -- ... (continúa para los demás meses)
    SUM(CASE WHEN YEAR(fecha) = 2022 THEN cantidad ELSE 0 END) AS ventas_2022,
    SUM(CASE WHEN YEAR(fecha) = 2023 THEN cantidad ELSE 0 END) AS ventas_2023
FROM ventas;

I dette eksemplet bruker vi CASE inne i SUM-funksjonen for å beregne salgstotaler etter måned og år i en enkelt spørring. For hver måned vurderer vi om måneden for salgsdatoen samsvarer med den spesifikke måneden og legger til tilsvarende beløp. På samme måte, for hvert år, evaluerer vi om året for salgsdatoen samsvarer med det spesifikke året og legger til det tilsvarende beløpet. Dette lar oss få alle totalsummene i en effektiv spørring.

Beste praksis ved bruk av CASE i MySQL

  • Bruk CASE bare når det er nødvendig, og unngå overbruk, da det kan påvirke søkeytelsen hvis det brukes overdrevent.
  • Prøv å holde CASE-uttrykk så enkle og lesbare som mulig. Hvis logikken blir for kompleks, bør du vurdere å dele den opp i flere CASE-uttrykk eller bruke underspørringer.
  • Bruk CASE i kombinasjon med andre MySQL-klausuler og funksjoner for å dra full nytte av potensialet deres, for eksempel i WHERE, ORDER BY, GRUPPE AV og aggregeringsfunksjoner.
  • Vær forsiktig når du nester flere CASE-uttrykk, da det kan gjøre koden vanskelig å lese og vedlikeholde. Om nødvendig, legg til forklarende kommentarer.

Vanlige feil ved bruk av CASE og hvordan du unngår dem

  • Glem ELSE-klausulen: Sørg for å inkludere ELSE-klausulen for å håndtere saker der ingen av betingelsene er oppfylt. Hvis ikke spesifisert, vil NULL bli tildelt som standard.
  • Ikke avslutt CASE-uttrykket med END: Husk å alltid avslutte CASE-uttrykket med nøkkelordet END. Ellers får du en syntaksfeil.
  • Bruke inkompatible datatyper: Sørg for at resultatene som returneres av hver WHEN-betingelse er av samme datatype. Hvis du blander datatyper, kan du få uventede resultater eller feil.
  • Uten hensyn til rekkefølgen av forholdene: Forhold i CASE vurderes i den rekkefølgen de vises. Sørg for å plassere de mer spesifikke betingelsene før de mer generelle for å få de ønskede resultatene.
  MySQL Docker: Smooth Migration from Traditional Environments

Alternativer til CASE i MySQL

Selv om CASE er en kraftig funksjon, er det noen alternativer du kan vurdere i visse tilfeller:

  • IF uttrykk: The IF-funksjon i MySQL lar deg evaluere en betingelse og returnere en verdi hvis betingelsen er sann og en annen verdi hvis den er usann. Det er et enklere alternativ for tilfeller med unike forhold.
  • Oppslagstabeller: I noen tilfeller kan du bruke separate oppslagstabeller for å lagre betingelsene og de tilsvarende resultatene. Du kan deretter slå sammen disse tabellene med hovedtabellen for å få de ønskede resultatene.
  • Lagrede visninger eller funksjoner: Hvis du har komplekse søk som bruker CASE på en gjentakende basis, kan du vurdere å opprette visninger eller lagrede funksjoner for å innkapsle den logikken og forenkle påfølgende spørringer.

Ofte stilte spørsmål om CASE i MySQL

1. Kan jeg bruke CASE i kombinasjon med andre MySQL-funksjoner?

Ja, du kan bruke CASE i kombinasjon med andre MySQL-funksjoner, for eksempel aggregerte funksjoner (SUM, AVG, COUNT, etc.), dato- og klokkeslettfunksjoner (ÅR, MÅNED, DAG osv.), strengfunksjoner (CONCAT, SUBSTRING, LENGTH, etc.), og mer.

2. Er det en grense for antall NÅR-betingelser jeg kan bruke i et CASE-uttrykk?

Det er ingen spesifikk grense for antall WHEN-betingelser du kan bruke i et CASE-uttrykk. Vær imidlertid oppmerksom på at et stort antall forhold kan påvirke kodelesbarhet og søkeytelse. Hvis du har mange forhold, bør du vurdere å forenkle logikken eller dele den opp i flere CASE-uttrykk.

3. Kan jeg bruke underspørringer i et CASE-uttrykk?

Ja, du kan bruke underspørringer i et CASE-uttrykk, både i WHEN-betingelser og THEN-resultater. Dette lar deg utføre mer komplekse beregninger eller sammenligninger basert på resultatene av andre spørringer.

4. Hvordan kan jeg håndtere nullverdier i et CASE-uttrykk?

Du kan håndtere nullverdier i et CASE-uttrykk ved å bruke tilstanden IS NULL eller IS NOT NULL. Du kan for eksempel bruke CASE WHEN column IS NULL THEN 'Null value' ELSE kolonne END for å tilordne en spesifikk verdi når kolonnen er null og returnere den faktiske verdien når den ikke er det.

Sakskonklusjoner i Mysql

CASE-funksjonen i MySQL er et kraftig og allsidig verktøy som lar deg utføre betingede operasjoner i spørringene dine. Med CASE kan du evaluere forskjellige forhold og returnere spesifikke resultater avhengig av om disse betingelsene er oppfylt eller ikke. Eksemplene som presenteres i denne artikkelen gir deg et solid grunnlag for å begynne å bruke CASE i dine egne spørsmål og tilpasse det til dine spesifikke behov.

Husk å følge beste praksis når du bruker CASE, som å holde uttrykk enkle og lesbare, bruke CASE i kombinasjon med andre MySQL-klausuler og -funksjoner , og vurdere alternativer når det er passende. Med øvelse og eksperimentering vil du kunne dra full nytte av CASE i MySQL og forbedre effektiviteten og lesbarheten til spørringene dine.

Hvis du har flere spørsmål eller trenger flere eksempler, kan du gjerne søke etter ytterligere ressurser eller se den offisielle MySQL-dokumentasjonen. Fortsett å utforske og utnytte kraften til CASE i databaseprosjektene dine!

Tilleggsressurser: