தொகுதி பாடங்கள் (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) என்று கணக்கிடுங்கள். மூன்று நெடுவரிசைகள்: Department_id, high, standard. டிபார்ட்மென்ட்_ஐடி மூலம் ஆர்டர் செய்யவும் (கடைசியாக பூஜ்யம்).
குறிப்பைக் காட்டு
SUM(CASE WHEN ... THEN 1 ELSE 0 END) பேட்டர்ன் நிபந்தனை எண்ணாகும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்