ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 4 · 4లో పాఠం 3కోర్సులో 15/57~10 min
మాడ్యూల్ పాఠాలు (3/4)

షరతులతో కూడిన తర్కం: CASE WHEN

ఇప్పటివరకు మనం చూసిన ప్రతిదానికి డేటా యథాతథంగా సంగ్రహిస్తుంది. తరచుగా, అయితే, మీరు కోరుకుంటారు దీన్ని మార్పు చేయడానికి: జీతాలను శ్రేణులుగా వర్గీకరించండి, కొత్త నియామకాలను ఇలా గుర్తించండి "జూనియర్", సంఖ్యా కోడ్‌ను చదవగలిగే లేబుల్‌గా అనువదించండి. SQL యొక్క ప్రమాణం దీని కోసం సాధనాన్ని CASE WHEN అంటారు.

వాక్యనిర్మాణం: ఒక మినీ if/else

SQL
CASE
  WHEN condition_1 THEN value_1
  WHEN condition_2 THEN value_2
  ...
  ELSE default_value
END

ఇది ఖచ్చితంగా ఏ భాషలోనైనా if/else if/else లాగా చదవబడుతుంది: SQL మూల్యాంకనం చేస్తుంది పరిస్థితులు ** క్రమంలో ** మరియు మొదటి నిజమైన వద్ద ఆపి, తిరిగి సంబంధిత value. ఏదీ నిజం కాకపోతే, అది ELSE విలువను అందిస్తుంది. మీరు ఉంటే ELSEని వదిలివేయండి మరియు బ్రాంచ్ సరిపోలలేదు, అది NULLని అందిస్తుంది.

SQL
-- Classify employees by salary tier:
SELECT first_name,
       last_name,
       salary,
       CASE
         WHEN salary >= 50000 THEN 'Senior'
         WHEN salary >= 35000 THEN 'Mid'
         ELSE                       'Junior'
       END AS tier
FROM   employees;

CASE SELECT లోపల నివసిస్తుంది: ఇది ఏదైనా ఒక నిలువు వరుసను ఉత్పత్తి చేస్తుంది ఫంక్షన్, మరియు దీనికి AS (ఇక్కడ)తో మారుపేరు ఇవ్వడం చాలా సాధారణం tier).

CASEని ఎక్కడ ఉపయోగించాలి

మూడు పునరావృత స్థలాలు:

  1. ఉత్పన్నమైన నిలువు వరుసలను సృష్టించడానికి **SELECT**లో (పై ఉదాహరణ).
  2. "కస్టమ్" సార్టింగ్ కోసం **ORDER BY**లో:
    SQL
    ORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name;
    -- Engineering first, then the rest, alphabetically by last name.
  3. "షరతులతో లెక్కించడానికి" ** మొత్తం ఫంక్షన్‌ల లోపల**:
    SQL
    SELECT
      COUNT(*) AS total,
      SUM(CASE WHEN salary >= 50000 THEN 1 ELSE 0 END) AS senior,
      SUM(CASE WHEN salary <  35000 THEN 1 ELSE 0 END) AS junior
    FROM employees;
    ఈ నమూనా — SUM(CASE WHEN … THEN 1 ELSE 0 END) — అత్యంత సాధారణమైనది డాష్‌బోర్డ్‌లలో "షరతులతో కూడిన గణన" ఉపయోగించబడుతుంది.

"కాంపాక్ట్" రూపం

మీరు ఒకే ఎక్స్‌ప్రెషన్ని పోల్చినప్పుడు చిన్న వేరియంట్ కూడా ఉంది ఖచ్చితమైన విలువలకు వ్యతిరేకంగా:

SQL
CASE department_id
  WHEN 1 THEN 'Ingegneria'
  WHEN 2 THEN 'Vendite'
  ELSE       'Altro'
END

ఇది CASE WHEN department_id = 1 THEN ... WHEN department_id = 2 THEN ... ENDకి సమానం, మరింత కాంపాక్ట్. ఇది ** ఖచ్చితమైన సమానత్వం** కోసం మాత్రమే పని చేస్తుంది: అయితే మీకు >= లేదా మరొక పోలిక అవసరం, మీరు విస్తరించిన వాటికి తిరిగి వెళ్లాలి రూపం.

దీనిని ప్రయత్నించండి

వ్యాయామం#sql.m4.l3.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి ఉద్యోగికి, మొదటి పేరు (మొదటి_పేరు), చివరి పేరు (చివరి_పేరు) మరియు జీతం కనీసం 50000 అయితే 'ఆల్టో' అని ఉండే 'టైర్' నిలువు వరుసను చూపండి, లేకపోతే 'స్టాండర్డ్'. మూడు నిలువు వరుసలు, ఒక్కో ఉద్యోగికి ఒక వరుస.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

షరతు జీతం >= 50000. CASEని ENDతో మూసివేయాలని మరియు అలియాస్ 'టైర్'ని ఉపయోగించాలని గుర్తుంచుకోండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#sql.m4.l3.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి విభాగానికి (department_id), SUM(CASE...)ని ఉపయోగించి ఎంత మంది ఉద్యోగులకు అధిక జీతం (>= 50000) మరియు ఎంత మంది స్టాండర్డ్ (< 50000) ఉన్నారో లెక్కించండి. మూడు నిలువు వరుసలు: డిపార్ట్‌మెంట్_ఐడి, హై, స్టాండర్డ్. డిపార్ట్‌మెంట్_ఐడి ద్వారా ఆర్డర్ చేయండి (చివరి శూన్యం).

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

SUM(CASE WHEN ... ఆ తర్వాత 1 ELSE 0 END) నమూనా షరతులతో కూడిన గణన.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది