- Funksioni CASE në MySQL ju lejon të kryeni vlerësime të kushtëzuara dhe të ktheni rezultate të personalizuara.
- Kushte të shumëfishta mund të përdoren me klauzolën WHEN dhe vlerat null mund të trajtohen me ELSE.
- CASE mund të kombinohet me funksione grumbullimi për të optimizuar pyetjet.
- Ndjekja e praktikave më të mira gjatë përdorimit të CASE është thelbësore për të ruajtur performancën dhe lexueshmërinë e kodit.
Funksioni CASE në MySQL është një mjet i fuqishëm që ju lejon të kryeni operacione të kushtëzuara brenda pyetjeve tuaja. Me CASE, ju mund të vlerësoni kushte të ndryshme dhe të ktheni rezultate specifike në varësi të faktit nëse ato kushte plotësohen apo jo. Ne do ta shpjegojmë këtë funksion me shembuj praktikë që do t'ju ndihmojnë të zotëroni përdorimin e CASE në MySQL dhe të përmirësoni aftësitë tuaja në menaxhimin e bazës së të dhënave.
Cili është funksioni CASE në MySQL?
Funksioni CASE në MySQL është një shprehje kushtëzuese që ju lejon të vlerësoni kushte të ndryshme dhe të ktheni rezultate specifike në varësi të faktit nëse këto kushte plotësohen. Është një mjet shumë i dobishëm për kryerjen e operacioneve logjike brenda pyetjeve tuaja dhe për të marrë rezultate të personalizuara bazuar në kritere specifike.
CASE funksionon në mënyrë të ngjashme me një seri deklaratash IF-THEN-ELSE, ku mund të specifikoni kushte të shumta dhe vlerat që do të kthehen kur të plotësohen ato kushte. Nëse asnjë nga kushtet nuk plotësohet, mund të përcaktoni një vlerë të paracaktuar duke përdorur klauzolën ELSE.
Sintaksa bazë CASE në MySQL
Sintaksa bazë e funksionit CASE në MySQL është si më poshtë:
CASE
WHEN condición1 THEN resultado1
WHEN condición2 THEN resultado2
...
WHEN condiciónN THEN resultadoN
ELSE resultado_predeterminado
END
Këtu është një shpjegim i secilës pjesë të sintaksës:
WHEN: Përcakton kushtin që do të vlerësohet.THEN: Tregon rezultatin që do të kthehet nëse plotësohet kushti përkatës.ELSE: (Opsionale) Përcakton rezultatin që do të kthehet nëse asnjë nga kushtet e mësipërme nuk plotësohet.END: Shënon fundin e shprehjes CASE.
Tani që e dini sintaksën bazë, le të shqyrtojmë disa shembuj praktikë!
Shembulli 1: Klasifikoni nxënësit sipas mesatares së tyre
Supozoni se keni një tabelë të quajtur "students" me kolonat e mëposhtme: "id", "emri" dhe "avg". Ju dëshironi të renditni studentët sipas GPA-së së tyre duke përdorur funksionin CASE. Mund ta bëni në këtë mënyrë:
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;
Në këtë shembull, ne përdorim CASE për të vlerësuar mesataren e secilit student dhe për të caktuar një gradë përkatëse. Nëse mesatarja është më e madhe ose e barabartë me 90, ajo klasifikohet si "E jashtëzakonshme". Nëse është midis 80 dhe 89, ai klasifikohet si "i shquar" dhe kështu me radhë. Nëse mesatarja është më pak se 60, ajo klasifikohet si "I pamjaftueshëm".
Shembulli 2: Caktimi i kategorive të produkteve
Imagjinoni që keni një tabelë të quajtur "produkte" me kolonat "id", "emri" dhe "çmimi". Ju dëshironi të caktoni një kategori për çdo produkt bazuar në çmimin e tij duke përdorur funksionin CASE. Ju mund ta bëni këtë në këtë mënyrë:
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;
Në këtë shembull, ne përdorim CASE për të vlerësuar çmimin e secilit produkt dhe për të caktuar një kategori përkatëse. Nëse çmimi është më i madh se 1000, ai klasifikohet si "Premium". Nëse është midis 500 dhe 1000, ai klasifikohet si "High-End" dhe kështu me radhë. Nëse çmimi është më i vogël ose i barabartë me 100, ai klasifikohet si "Ekonomik".
Shembulli 3: Llogaritni zbritjet në bazë të sasisë së blerë
Supozoni se keni një tabelë të quajtur "shitjet" me kolonat "id", "produkt" dhe "sasi". Ju dëshironi të llogaritni zbritjen e aplikuar për çdo shitje bazuar në sasinë e blerë duke përdorur funksionin CASE. Ju mund ta bëni këtë në këtë mënyrë:
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;
Në këtë shembull, ne përdorim CASE për të vlerësuar sasinë e blerë të secilit produkt dhe për të llogaritur zbritjen përkatëse. Nëse sasia është më e madhe ose e barabartë me 100, aplikohet një zbritje prej 20%. Nëse është midis 50 dhe 99, aplikohet një zbritje prej 15%, e kështu me radhë. Nëse sasia është më e vogël se 20, nuk ka zbritje.
Shembulli 4: Konvertimi i vlerave numerike në intervale
Imagjinoni që keni një tabelë të quajtur "punonjës" me kolonat "id", "emri" dhe "mosha". Ju dëshironi të konvertoni moshat e punonjësve në intervale duke përdorur funksionin CASE. Ju mund ta bëni këtë në këtë mënyrë:
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;
Në këtë shembull, ne përdorim CASE për të vlerësuar moshën e secilit punonjës dhe për të caktuar një gamë përkatëse. Nëse mosha është më e madhe ose e barabartë me 60 vjeç, ajo klasifikohet si "i moshuar". Nëse jeni midis 40 dhe 59 vjeç, ju klasifikoheni si "mosha e mesme" dhe kështu me radhë. Nëse mosha është më pak se 20, ajo klasifikohet si "Minor".
Shembulli 5: Caktimi i etiketave bazuar në kushte të shumta
Supozoni se keni një tabelë të quajtur "porosi" me kolonat "id", "klient", "total" dhe "status". Ju dëshironi të caktoni etiketa për çdo porosi bazuar në totalin dhe statusin e tij duke përdorur funksionin CASE me kushte të shumta. Ju mund ta bëni këtë në këtë mënyrë:
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;
Në këtë shembull, ne përdorim CASE me kushte të shumta për të vlerësuar totalin dhe statusin e çdo porosie dhe për të caktuar një etiketë të përshtatshme. Nëse totali është më i madh se 1000 dhe statusi është "Dorëzuar", ai etiketohet si "VIP". Nëse totali është më i madh se 500 dhe statusi është "Dorëzuar", ai etiketohet si "Përparësi". Nëse statusi është "Në pritje", ai etiketohet si "Në proces". Përndryshe, është etiketuar si "i rregullt".
Shembulli 6: Trajtimi i vlerave null me CASE
Imagjinoni që keni një tabelë të quajtur "klientë" me kolonat "id", "emri" dhe "email". Disa klientë mund të mos kenë një email në dosje, gjë që do të rezultonte në vlera null në kolonën "email". Ju mund të përdorni funksionin CASE për të trajtuar në mënyrë të përshtatshme këto vlera nule. Për shembull:
SELECT nombre,
CASE
WHEN email IS NULL THEN 'Sin correo electrónico'
ELSE email
END AS informacion_contacto
FROM clientes;
Në këtë shembull, ne përdorim CASE për të vlerësuar nëse kolona "email" është e pavlefshme. Nëse është i pavlefshëm, shfaqet teksti "Pa email". Përndryshe, shfaqet vlera aktuale e kolonës "email". Kjo na lejon të trajtojmë me hijeshi rastet kur informacioni i kontaktit mungon.
Shembulli 7: Kombinimi i CASE me funksionet agregate
Funksioni CASE gjithashtu mund të kombinohet me funksione agregate si SUM, AVG, COUNT, etj. Supozoni se keni një tabelë të quajtur "shitjet" me kolonat "id", "produkt", "sasi" dhe "çmim". Ju dëshironi të llogaritni shitjet totale sipas kategorisë së produktit duke përdorur CASE dhe SUM. Ju mund ta bëni këtë në këtë mënyrë:
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;
Në këtë shembull, ne përdorim CASE brenda funksionit SUM për të llogaritur shitjet totale sipas kategorisë së produktit. Nëse çmimi është më i madh se 1000, shuma i shtohet "premium_sales". Nëse çmimi është më i vogël ose i barabartë me 1000, shuma i shtohet "shitjet e rregullta". Kjo na lejon të marrim nëntotalet bazuar në kushte specifike.
Shembulli 8: Përdorimi i CASE në fjalitë WHERE
Funksioni CASE mund të përdoret gjithashtu në klauzolën WHERE për të filtruar të dhënat bazuar në kushte specifike. Supozoni se keni një tabelë të quajtur "punonjës" me kolonat "id", "emri", "departamenti" dhe "rroga". Ju dëshironi të synoni punonjësit, paga e të cilëve është mbi mesataren për departamentin e tyre. Ju mund ta bëni këtë në këtë mënyrë:
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
);
Në këtë shembull, ne përdorim CASE në nënpyetës për të llogaritur pagën mesatare sipas departamentit. Nënpyetja krahason departamentin e secilit punonjës me departamentin aktual dhe merr në konsideratë vetëm pagat e punonjësve në të njëjtin departament për të llogaritur mesataren. Më pas, në pyetjen kryesore, ne filtrojmë punonjësit, paga e të cilëve është më e lartë se mesatarja e llogaritur për departamentin e tyre.
Shembulli 9: Gjenerimi i kolonave të llogaritura me CASE
Funksioni CASE mund të përdoret gjithashtu për të gjeneruar kolona të llogaritura bazuar në kushte specifike. Supozoni se keni një tabelë të quajtur "porosi" me kolonat "id", "klient", "total" dhe "datë". Ju dëshironi të krijoni një kolonë shtesë të quajtur "zbritje" që aplikon përqindje të ndryshme zbritje në varësi të totalit të porosisë. Ju mund ta bëni këtë në këtë mënyrë:
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;
Në këtë shembull, ne përdorim CASE për të gjeneruar kolonën e llogaritur "zbritje". Nëse porosia totale është më e madhe se 1000, aplikohet një zbritje prej 10%. Nëse totali është më i madh se 500, aplikohet një zbritje prej 5%. Në çdo rast tjetër, asnjë zbritje nuk zbatohet. Kjo kolonë e llogaritur mund të përdoret për analiza të mëtejshme ose për të shfaqur informacion shtesë në rezultatet e pyetjes.
Shembulli 10: Zbatimi i logjikës komplekse me deklarata CASE të ndërlidhura
Në disa raste, mund t'ju duhet të zbatoni logjikë më komplekse të kushtëzuar duke përdorur deklarata të ndërlidhura CASE. Supozoni se keni një tabelë të quajtur "students" me kolonat "id", "emri", "nota_matematikore" dhe "nota_gjuhë". Ju dëshironi t'i caktoni një kategori secilit student bazuar në notat e tyre në matematikë dhe gjuhë. Mund ta bëni në këtë mënyrë:
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;
Në këtë shembull, ne përdorim deklarata të ndërlidhura CASE për të zbatuar logjikë më komplekse të kushtëzuar. Së pari, vlerësojmë nëse notat e matematikës dhe gjuhës janë më të mëdha ose të barabarta me 90. Nëse po, caktohet kategoria "Shkëlqyeshëm". Më pas, vlerësojmë nëse të dyja notat janë më të mëdha ose të barabarta me 80. Nëse po, caktohet kategoria “I dukshëm”. Nëse asnjë nga kushtet e mësipërme nuk plotësohet, ne kalojmë në nivelin tjetër të CASE të ndërlidhur. Këtu vlerësojmë nëse të paktën njëra nga notat (matematikë ose gjuhë) është më e madhe ose e barabartë me 70. Nëse po, caktohet kategoria “i rregullt”. Nëse asnjë nga kushtet nuk plotësohet, caktohet kategoria "Nevojat për përmirësim".
Shembulli 11: Optimizimi i pyetjeve me CASE
Funksioni CASE mund të përdoret gjithashtu për të optimizuar pyetjet dhe për të shmangur pyetje të shumta të veçanta. Supozoni se keni një tabelë të quajtur "shitjet" me kolonat "id", "produkt", "sasi" dhe "datë". Ju dëshironi të merrni shitjet totale në muaj dhe shitjet totale në vit në një pyetje të vetme. Ju mund ta bëni këtë në këtë mënyrë:
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;
Në këtë shembull, ne përdorim CASE brenda funksionit SUM për të llogaritur totalin e shitjeve sipas muajve dhe vitit në një pyetje të vetme. Për çdo muaj, ne vlerësojmë nëse muaji i datës së shitjes përputhet me muajin specifik dhe shtojmë shumën përkatëse. Në mënyrë të ngjashme, për çdo vit, ne vlerësojmë nëse viti i datës së shitjes përputhet me vitin specifik dhe shtojmë shumën përkatëse. Kjo na lejon të marrim të gjitha totalet në një pyetje efikase.
Praktikat më të mira kur përdorni CASE në MySQL
- Përdorni CASE vetëm kur është e nevojshme dhe shmangni përdorimin e tepërt të tij, pasi mund të ndikojë në performancën e pyetjes nëse përdoret shumë.
- Përpiquni t'i mbani shprehjet CASE sa më të thjeshta dhe të lexueshme. Nëse logjika bëhet shumë e ndërlikuar, merrni parasysh ndarjen e saj në shprehje të shumta CASE ose përdorimin e nënpyetjeve.
- Përdorni CASE në kombinim me klauzola dhe funksione të tjera MySQL për të përfituar plotësisht nga potenciali i tyre, si në WHERE, ORDER BY, GRUPI NGA dhe funksionet e grumbullimit.
- Kini kujdes kur futni shprehje të shumta CASE, pasi mund ta bëjë kodin tuaj të vështirë për t'u lexuar dhe mbajtur. Nëse është e nevojshme, shtoni komente shpjeguese.
Gabimet e zakonshme kur përdorni CASE dhe si t'i shmangni ato
- Harrojeni klauzolën ELSE: Sigurohuni që të përfshini klauzolën ELSE për të trajtuar rastet kur asnjë nga kushtet nuk plotësohet. Nëse nuk specifikohet, NULL do të caktohet si parazgjedhje.
- Mos e mbyllni shprehjen CASE me END: Mos harroni të përfundoni gjithmonë shprehjen CASE me fjalën kyçe END. Përndryshe do të merrni një gabim sintaksor.
- Përdorimi i llojeve të papajtueshme të të dhënave: Sigurohuni që rezultatet e kthyera nga çdo kusht WHEN janë të të njëjtit lloj të dhënash. Nëse përzieni llojet e të dhënave, mund të merrni rezultate ose gabime të papritura.
- Duke mos marrë parasysh rendin e kushteve: Kushtet në CASE vlerësohen sipas radhës në të cilën shfaqen. Sigurohuni që të vendosni kushtet më specifike përpara atyre më të përgjithshme për të marrë rezultatet e dëshiruara.
Alternativat e CASE në MySQL
Megjithëse CASE është një funksion i fuqishëm, ka disa alternativa që mund t'i merrni parasysh në raste të caktuara:
- Shprehjet IF: The Funksioni IF në MySQL ju lejon të vlerësoni një kusht dhe të ktheni një vlerë nëse kushti është i vërtetë dhe një vlerë tjetër nëse është false. Është një alternativë më e thjeshtë për rastet e kushteve unike.
- Tabelat e kërkimit: Në disa raste, mund të përdorni tabela të veçanta kërkimi për të ruajtur kushtet dhe rezultatet përkatëse. Më pas mund t'i bashkoni këto tabela me tabelën kryesore për të marrë rezultatet e dëshiruara.
- Pamjet ose funksionet e ruajtura: Nëse keni pyetje komplekse që përdorin CASE në baza të përsëritura, mund të konsideroni krijimin e pamjeve ose funksionet e ruajtura për të përmbledhur atë logjikë dhe për të thjeshtuar pyetjet pasuese.
Pyetjet e bëra më shpesh rreth CASE në MySQL
1. A mund të përdor CASE në kombinim me funksione të tjera MySQL?
Po, mund të përdorni CASE në kombinim me funksione të tjera MySQL, si funksionet e përgjithshme (SUM, AVG, COUNT, etj.), funksionet e datës dhe orës (YEAR, MUAJ, DAY, etj.), funksionet e vargut (CONCAT, SUBSTRING, LENGTH, etj.) dhe më shumë.
2. A ka një kufi për numrin e kushteve WHEN që mund të përdor në një shprehje CASE?
Nuk ka asnjë kufi specifik për numrin e kushteve WHEN që mund të përdorni në një shprehje CASE. Sidoqoftë, mbani në mend se një numër i madh kushtesh mund të ndikojnë në lexueshmërinë e kodit dhe performancën e pyetjeve. Nëse keni shumë kushte, merrni parasysh thjeshtimin e logjikës ose ndarjen e saj në shprehje të shumta CASE.
3. A mund të përdor nënpyetje brenda një shprehje CASE?
Po, ju mund të përdorni nënpyetje brenda një shprehje CASE, si në kushtet WHEN ashtu edhe në rezultatet THEN. Kjo ju lejon të kryeni llogaritje ose krahasime më komplekse bazuar në rezultatet e pyetjeve të tjera.
4. Si mund të trajtoj vlerat null në një shprehje CASE?
Ju mund të trajtoni vlerat null në një shprehje CASE duke përdorur kushtin IS NULL ose NOT NULL. Për shembull, mund të përdorni CASE WHEN kolona IS NULL THEN 'Null value' ELSE END kolona për të caktuar një vlerë specifike kur kolona është null dhe për të kthyer vlerën aktuale kur nuk është.
Përfundime të rastit në Mysql
Funksioni CASE në MySQL është një mjet i fuqishëm dhe i gjithanshëm që ju lejon të kryeni operacione të kushtëzuara brenda pyetjeve tuaja. Me CASE, ju mund të vlerësoni kushte të ndryshme dhe të ktheni rezultate specifike në varësi të faktit nëse ato kushte plotësohen apo jo. Shembujt e paraqitur në këtë artikull ju japin një bazë solide për të filluar përdorimin e CASE në pyetjet tuaja dhe ta përshtatni atë me nevojat tuaja specifike.
Mos harroni të ndiqni praktikat më të mira kur përdorni CASE, të tilla si mbajtja e shprehjeve të thjeshta dhe të lexueshme, përdorimi i CASE në kombinim me klauzola dhe funksione të tjera të MySQL , dhe shqyrtimi i alternativave kur është e përshtatshme. Me praktikë dhe eksperimentim, do të jeni në gjendje të përfitoni plotësisht nga CASE në MySQL dhe të përmirësoni efikasitetin dhe lexueshmërinë e pyetjeve tuaja.
Nëse keni ndonjë pyetje shtesë ose keni nevojë për më shumë shembuj, mos ngurroni të kërkoni burime shtesë ose konsultohuni me dokumentacionin zyrtar të MySQL. Vazhdoni të eksploroni dhe përdorni fuqinë e CASE në projektet tuaja të bazës së të dhënave!
Burimet shtesë:
Indeks
- 0.1 Cili është funksioni CASE në MySQL?
- 0.2 Sintaksa bazë CASE në MySQL
- 0.3 Shembulli 1: Klasifikoni nxënësit sipas mesatares së tyre
- 0.4 Shembulli 2: Caktimi i kategorive të produkteve
- 0.5 Shembulli 3: Llogaritni zbritjet në bazë të sasisë së blerë
- 0.6 Shembulli 4: Konvertimi i vlerave numerike në intervale
- 0.7 Shembulli 5: Caktimi i etiketave bazuar në kushte të shumta
- 0.8 Shembulli 6: Trajtimi i vlerave null me CASE
- 0.9 Shembulli 7: Kombinimi i CASE me funksionet agregate
- 0.10 Shembulli 8: Përdorimi i CASE në fjalitë WHERE
- 0.11 Shembulli 9: Gjenerimi i kolonave të llogaritura me CASE
- 0.12 Shembulli 10: Zbatimi i logjikës komplekse me deklarata CASE të ndërlidhura
- 0.13 Shembulli 11: Optimizimi i pyetjeve me CASE
- 1 Praktikat më të mira kur përdorni CASE në MySQL
- 2 Gabimet e zakonshme kur përdorni CASE dhe si t'i shmangni ato
- 3 Alternativat e CASE në MySQL
- 4 Pyetjet e bëra më shpesh rreth CASE në MySQL
- 5 Përfundime të rastit në Mysql