முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 4 · பாடம் 3 இன் 4பாடத்திட்டத்தில் 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) என்று கணக்கிடுங்கள். மூன்று நெடுவரிசைகள்: Department_id, high, standard. டிபார்ட்மென்ட்_ஐடி மூலம் ஆர்டர் செய்யவும் (கடைசியாக பூஜ்யம்).

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

SUM(CASE WHEN ... THEN 1 ELSE 0 END) பேட்டர்ன் நிபந்தனை எண்ணாகும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்