మాడ్యూల్ పాఠాలు (3/4)
షరతులతో కూడిన తర్కం: CASE WHEN
ఇప్పటివరకు మనం చూసిన ప్రతిదానికి డేటా యథాతథంగా సంగ్రహిస్తుంది. తరచుగా, అయితే, మీరు కోరుకుంటారు
దీన్ని మార్పు చేయడానికి: జీతాలను శ్రేణులుగా వర్గీకరించండి, కొత్త నియామకాలను ఇలా గుర్తించండి
"జూనియర్", సంఖ్యా కోడ్ను చదవగలిగే లేబుల్గా అనువదించండి. SQL యొక్క ప్రమాణం
దీని కోసం సాధనాన్ని CASE WHEN అంటారు.
వాక్యనిర్మాణం: ఒక మినీ if/else
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ని అందిస్తుంది.
-- 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ని ఎక్కడ ఉపయోగించాలి
మూడు పునరావృత స్థలాలు:
- ఉత్పన్నమైన నిలువు వరుసలను సృష్టించడానికి **
SELECT**లో (పై ఉదాహరణ). - "కస్టమ్" సార్టింగ్ కోసం **
ORDER BY**లో:SQLORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name; -- Engineering first, then the rest, alphabetically by last name. - "షరతులతో లెక్కించడానికి" ** మొత్తం ఫంక్షన్ల లోపల**:
ఈ నమూనా —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)— అత్యంత సాధారణమైనది డాష్బోర్డ్లలో "షరతులతో కూడిన గణన" ఉపయోగించబడుతుంది.
"కాంపాక్ట్" రూపం
మీరు ఒకే ఎక్స్ప్రెషన్ని పోల్చినప్పుడు చిన్న వేరియంట్ కూడా ఉంది ఖచ్చితమైన విలువలకు వ్యతిరేకంగా:
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కి సమానం, మరింత కాంపాక్ట్. ఇది ** ఖచ్చితమైన సమానత్వం** కోసం మాత్రమే పని చేస్తుంది: అయితే
మీకు >= లేదా మరొక పోలిక అవసరం, మీరు విస్తరించిన వాటికి తిరిగి వెళ్లాలి
రూపం.
దీనిని ప్రయత్నించండి
ప్రతి ఉద్యోగికి, మొదటి పేరు (మొదటి_పేరు), చివరి పేరు (చివరి_పేరు) మరియు జీతం కనీసం 50000 అయితే 'ఆల్టో' అని ఉండే 'టైర్' నిలువు వరుసను చూపండి, లేకపోతే 'స్టాండర్డ్'. మూడు నిలువు వరుసలు, ఒక్కో ఉద్యోగికి ఒక వరుస.
సూచనను చూపించు
షరతు జీతం >= 50000. CASEని ENDతో మూసివేయాలని మరియు అలియాస్ 'టైర్'ని ఉపయోగించాలని గుర్తుంచుకోండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
ప్రతి విభాగానికి (department_id), SUM(CASE...)ని ఉపయోగించి ఎంత మంది ఉద్యోగులకు అధిక జీతం (>= 50000) మరియు ఎంత మంది స్టాండర్డ్ (< 50000) ఉన్నారో లెక్కించండి. మూడు నిలువు వరుసలు: డిపార్ట్మెంట్_ఐడి, హై, స్టాండర్డ్. డిపార్ట్మెంట్_ఐడి ద్వారా ఆర్డర్ చేయండి (చివరి శూన్యం).
సూచనను చూపించు
SUM(CASE WHEN ... ఆ తర్వాత 1 ELSE 0 END) నమూనా షరతులతో కూడిన గణన.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది