🧚 Άκου! Το Beekeeper Studio είναι ένα γρήγορο, σύγχρονο και open source GUI για βάσεις δεδομένων Λήψη
13 Ιανουαρίου 2026 Από τον Matthew Rathbone

Η CASE προσθέτει λογική if/then/else σε ένα SQL query: ελέγχει μια λίστα συνθηκών και επιστρέφει το αποτέλεσμα της πρώτης που είναι αληθής. Τα παραδείγματα λειτουργούν σε PostgreSQL, MySQL, SQLite και SQL Server.

Πώς χρησιμοποιείς τη CASE

Γράψε ζεύγη WHEN condition THEN result ανάμεσα στο CASE και στο END. Η CASE επιστρέφει το αποτέλεσμα της πρώτης αληθούς συνθήκης ή την τιμή του ELSE αν καμία δεν ισχύει:

CASE
  WHEN condition THEN result
  [WHEN condition THEN result ...]
  [ELSE result]
END
SELECT
  CASE
    WHEN 72 >= 90 THEN 'Hot'
    WHEN 72 >= 60 THEN 'Mild'
    ELSE 'Cold'
  END;
-- Output: Mild

Όταν κάθε συνθήκη ελέγχει ισότητα με την ίδια τιμή, η πιο σύντομη «απλή» μορφή αναφέρει αυτή την τιμή μόνο μία φορά:

SELECT
  CASE 'amber'
    WHEN 'green' THEN 'Go'
    WHEN 'amber' THEN 'Slow down'
    WHEN 'red' THEN 'Stop'
    ELSE 'Unknown'
  END;
-- Output: Slow down

Σε ένα πραγματικό query οι συνθήκες ελέγχουν στήλες και η CASE προσθέτει μια νέα στήλη στο αποτέλεσμα:

-- Input: orders
-- order_id | amount
-- ---------+--------
-- 1001     | 45.00
-- 1002     | 100.00
-- 1003     | 349.99
-- 1004     | 1250.00

SELECT
  order_id,
  amount,
  CASE
    WHEN amount < 100 THEN 'Small'
    WHEN amount < 500 THEN 'Medium'
    ELSE 'Large'
  END AS order_size
FROM orders;

-- Output:
-- order_id | amount  | order_size
-- ---------+---------+-----------
-- 1001     | 45.00   | Small
-- 1002     | 100.00  | Medium
-- 1003     | 349.99  | Medium
-- 1004     | 1250.00 | Large

Κανόνες που πρέπει να ξέρεις

  • Κερδίζει η πρώτη αληθής συνθήκη. Οι συνθήκες ελέγχονται από πάνω προς τα κάτω, οπότε βάλε πρώτα την πιο στενή. Παραπάνω, το 100.00 είναι Medium επειδή το amount < 100 είναι ψευδές και το amount < 500 αληθές. Με λάθος σειρά, τα μικρά ποσά δεν φτάνουν ποτέ στον κλάδο τους:
SELECT
  CASE
    WHEN 45 < 500 THEN 'Medium'
    WHEN 45 < 100 THEN 'Small'  -- can never win
    ELSE 'Large'
  END;
-- Output: Medium
  • Χωρίς ELSE, αν δεν ταιριάξει τίποτα, παίρνεις NULL.
SELECT CASE WHEN 72 >= 90 THEN 'Hot' END;
-- Output: NULL
  • Έλεγξε για NULL με IS NULL. Το NULL = NULL δεν είναι αληθές, οπότε η απλή μορφή δεν μπορεί να ταιριάξει ένα NULL. Χρησιμοποίησε τη μορφή με συνθήκες:
SELECT CASE NULL WHEN NULL THEN 'matched' ELSE 'no match' END;
-- Output: no match

SELECT CASE WHEN NULL IS NULL THEN 'matched' ELSE 'no match' END;
-- Output: matched
  • Κάθε αποτέλεσμα χρειάζεται συμβατό τύπο. Αν ανακατέψεις αριθμό και κείμενο σε μία CASE, αποτυγχάνει σε PostgreSQL και SQL Server, οπότε κάνε cast τον αριθμό:
-- Input: products
-- name         | stock
-- -------------+------
-- Desk Lamp    | 12
-- Office Chair | 0

SELECT name, CASE WHEN stock > 0 THEN stock ELSE 'Sold out' END AS stock
FROM products;
-- PostgreSQL: ERROR: invalid input syntax for type integer: "Sold out"
-- SQL Server: Conversion failed when converting the varchar value 'Sold out' to data type int.

-- (in MySQL, cast with CAST(stock AS CHAR))
SELECT
  name,
  CASE WHEN stock > 0 THEN CAST(stock AS VARCHAR(10)) ELSE 'Sold out' END AS stock
FROM products;

-- Output:
-- name         | stock
-- -------------+---------
-- Desk Lamp    | 12
-- Office Chair | Sold out

Εναλλακτική σύνταξη

Για μία μόνο συνθήκη θα δεις και μια πιο σύντομη συνάρτηση:

-- MySQL
SELECT IF(72 >= 60, 'Mild', 'Cold');
-- Output: Mild

-- SQL Server and SQLite
SELECT IIF(72 >= 60, 'Mild', 'Cold');
-- Output: Mild

Δύο ακόμη συναρτήσεις είναι συντομεύσεις για συνηθισμένες εκφράσεις CASE. Το COALESCE(nickname, name) σημαίνει CASE WHEN nickname IS NOT NULL THEN nickname ELSE name END και το NULLIF(a, b) σημαίνει CASE WHEN a = b THEN NULL ELSE a END. Για την πρώτη, δες τον οδηγό για τη SQL COALESCE.

Η MySQL έχει επίσης μια εντολή CASE για stored procedures, που τελειώνει με END CASE. Αυτό το άρθρο καλύπτει την έκφραση CASE που χρησιμοποιείς σε queries.

Πότε να χρησιμοποιείς τη CASE;

Η CASE είναι έκφραση, οπότε λειτουργεί οπουδήποτε μπαίνει μια τιμή: στη λίστα του SELECT, στα ORDER BY και GROUP BY και μέσα σε συναρτήσεις συνάθροισης. Λειτουργεί και στο WHERE, αλλά εκεί τα απλά AND και OR είναι συνήθως πιο καθαρά. Οι περισσότερες χρήσεις ανήκουν σε μία από τις παρακάτω πέντε.

Χώρισε αριθμούς σε εύρη

Μετάτρεψε έναν αριθμό σε κατηγορία: κλίμακες τιμών, μεγέθη παραγγελιών, ηλικιακές ομάδες, βαθμούς. Γράψε τις συνθήκες από τη μία άκρη της κλίμακας ως την άλλη, ώστε το πρώτο ταίριασμα να είναι το σωστό.

Μετάφρασε κωδικούς σε ετικέτες

Οι βάσεις δεδομένων αποθηκεύουν σύντομους κωδικούς όπως 'A', 'ENG' ή 'gold'· οι άνθρωποι θέλουν λέξεις. Μια απλή CASE αντιστοιχίζει κάθε κωδικό σε μια ετικέτα ή σε μια τιμή, όπως ένα ποσοστό έκπτωσης, και το ELSE πιάνει όποιον κωδικό δεν περίμενες.

Μέτρησε ή άθροισε μόνο κάποιες γραμμές

Βάλε τη CASE μέσα σε COUNT ή SUM για να μετρήσεις ή να αθροίσεις μόνο τις γραμμές που πληρούν μια συνθήκη. Το COUNT(CASE WHEN ... THEN 1 END) λειτουργεί επειδή οι γραμμές που δεν ταιριάζουν δίνουν NULL, που το COUNT παραλείπει. Μία συνάρτηση συνάθροισης ανά συνθήκη σού δίνει πολλά σύνολα δίπλα-δίπλα, και έτσι φτιάχνεις έναν pivot πίνακα σε SQL.

Χειρίσου τις τιμές που λείπουν

Έλεγξε στήλες για NULL με σειρά προτίμησης και επέστρεψε μια ετικέτα όταν είναι όλες κενές. Για μια απλή εναλλακτική τιμή, το COALESCE είναι πιο σύντομο. Η CASE είναι το εργαλείο όταν κάθε είδος κενού χρειάζεται διαφορετικό αποτέλεσμα.

Ταξινόμησε με δική σου σειρά

Η αλφαβητική και η αριθμητική σειρά δεν ταιριάζουν σε όλα: μεγέθη ρούχων, προτεραιότητες tickets, μια λίστα με τα προβεβλημένα προϊόντα πρώτα. Μια CASE στο ORDER BY δίνει σε κάθε τιμή τη θέση που θέλεις.

Πραγματικά παραδείγματα CASE

Κατάταξε προϊόντα ανά τμήμα και τιμή

Ένα αποτέλεσμα μπορεί να είναι και το ίδιο μια CASE, οπότε κάθε τμήμα παίρνει τις δικές του κλίμακες τιμών:

-- Input: products
-- product_name     | category    | price
-- -----------------+-------------+--------
-- Laptop Pro 14    | Electronics | 1499.00
-- Wireless Earbuds | Electronics | 129.00
-- Leather Jacket   | Clothing    | 349.00
-- Cotton T-Shirt   | Clothing    | 19.99
-- Coffee Mug       | Kitchen     | 12.50

SELECT
  product_name,
  CASE category
    WHEN 'Electronics' THEN
      CASE
        WHEN price > 1000 THEN 'Premium Electronics'
        ELSE 'Standard Electronics'
      END
    WHEN 'Clothing' THEN
      CASE
        WHEN price > 200 THEN 'Designer Clothing'
        ELSE 'Regular Clothing'
      END
    ELSE 'Other Products'
  END AS product_class
FROM products;

-- Output:
-- product_name     | product_class
-- -----------------+---------------------
-- Laptop Pro 14    | Premium Electronics
-- Wireless Earbuds | Standard Electronics
-- Leather Jacket   | Designer Clothing
-- Cotton T-Shirt   | Regular Clothing
-- Coffee Mug       | Other Products

Πέρα από δύο επίπεδα, η εμφωλευμένη CASE γίνεται δυσανάγνωστη. Ένας πίνακας αναφοράς με join είναι συνήθως πιο καθαρός.

Εφάρμοσε έκπτωση ανά κατηγορία πελάτη

Κάθε κωδικός κατηγορίας αντιστοιχεί σε ένα ποσοστό έκπτωσης, και οι πελάτες χωρίς κατηγορία δεν παίρνουν έκπτωση:

-- Input: customers
-- id | customer_name | tier
-- ---+---------------+-------
-- 1  | Maya Brooks   | gold
-- 2  | Leo Martin    | silver
-- 3  | Ava Kim       | bronze
-- 4  | Noah Price    | NULL

-- Input: orders
-- id  | customer_id | order_total
-- ----+-------------+------------
-- 101 | 1           | 200.00
-- 102 | 2           | 150.00
-- 103 | 3           | 80.00
-- 104 | 4           | 60.00

SELECT
  customer_name,
  order_total,
  ROUND(order_total * CASE tier
    WHEN 'gold' THEN 0.15
    WHEN 'silver' THEN 0.10
    WHEN 'bronze' THEN 0.05
    ELSE 0
  END, 2) AS discount
FROM customers c
JOIN orders o ON c.id = o.customer_id
ORDER BY o.id;

-- Output:
-- customer_name | order_total | discount
-- --------------+-------------+---------
-- Maya Brooks   | 200.00      | 30.00
-- Leo Martin    | 150.00      | 15.00
-- Ava Kim       | 80.00       | 4.00
-- Noah Price    | 60.00       | 0.00

Κάνε pivot τις μηνιαίες πωλήσεις σε στήλες

Ένα SUM(CASE ...) ανά μήνα μετατρέπει τις γραμμές πωλήσεων σε μία στήλη για κάθε μήνα:

-- Input: sales
-- product_category | sale_date  | amount
-- -----------------+------------+-------
-- Books            | 2026-01-12 | 40.00
-- Games            | 2026-01-20 | 60.00
-- Books            | 2026-02-03 | 25.00
-- Books            | 2026-03-15 | 30.00
-- Games            | 2026-03-28 | 75.00

SELECT
  product_category,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 1 THEN amount ELSE 0 END) AS jan_sales,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 2 THEN amount ELSE 0 END) AS feb_sales,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 3 THEN amount ELSE 0 END) AS mar_sales
FROM sales
GROUP BY product_category
ORDER BY product_category;

-- Output:
-- product_category | jan_sales | feb_sales | mar_sales
-- -----------------+-----------+-----------+----------
-- Books            | 40.00     | 25.00     | 30.00
-- Games            | 60.00     | 0         | 75.00

Στον SQL Server, χρησιμοποίησε MONTH(sale_date) = 1 αντί για EXTRACT· στη SQLite, χρησιμοποίησε strftime('%m', sale_date) = '01'.

Ξεχώρισε τις τιμές που λείπουν από τις κενές

Τα εισαγόμενα δεδομένα έχουν συχνά και NULL και κενά strings. Η CASE μπορεί να επισημάνει το καθένα, ώστε να ξέρεις τι να καθαρίσεις:

-- Input: users
-- id | middle_name
-- ---+------------
-- 1  | Rose
-- 2  |
-- 3  | NULL

SELECT
  id,
  CASE
    WHEN middle_name IS NULL THEN 'Missing'
    WHEN middle_name = '' THEN 'Empty'
    ELSE middle_name
  END AS middle_name
FROM users;

-- Output:
-- id | middle_name
-- ---+------------
-- 1  | Rose
-- 2  | Empty
-- 3  | Missing

Δώσε σε κάθε κατηγορία μια θέση ταξινόμησης και μετά ταξινόμησε κατά όνομα μέσα σε αυτήν:

-- Input: products
-- product_name | category
-- -------------+------------
-- Wool Scarf   | Sale
-- Desk Lamp    | Featured
-- Bike Helmet  | Clearance
-- Smart Watch  | New Arrival
-- Air Fryer    | Featured

SELECT product_name, category
FROM products
ORDER BY
  CASE category
    WHEN 'Featured' THEN 1
    WHEN 'New Arrival' THEN 2
    WHEN 'Sale' THEN 3
    ELSE 4
  END,
  product_name;

-- Output:
-- product_name | category
-- -------------+------------
-- Air Fryer    | Featured
-- Desk Lamp    | Featured
-- Smart Watch  | New Arrival
-- Wool Scarf   | Sale
-- Bike Helmet  | Clearance

Περισσότερα για τη CASE

Σε αυτό το blog:

Επίσημη τεκμηρίωση:

Το Beekeeper Studio είναι ένα δωρεάν & open source GUI για βάσεις δεδομένων

Το καλύτερο εργαλείο για SQL queries & επεξεργασία που έχω χρησιμοποιήσει ποτέ. Μου δίνει ό,τι χρειάζομαι για να διαχειρίζομαι τη βάση δεδομένων μου. - ⭐⭐⭐⭐⭐ Mit

Το Beekeeper Studio είναι γρήγορο, εύχρηστο και κατανοητό με την πρώτη ματιά. Υποστηρίζει πάρα πολλές βάσεις δεδομένων και δουλεύει άψογα σε Windows, Mac και Linux.

Η έκδοση του Beekeeper για Linux έχει 100% όλες τις λειτουργίες, χωρίς εκπτώσεις και χωρίς συμβιβασμούς.

Τι λένε οι χρήστες για το Beekeeper Studio

★★★★★
«Το Beekeeper Studio αντικατέστησε εντελώς την παλιά μου ροή εργασίας με SQL. Είναι γρήγορο, εύχρηστο και κάνει τη δουλειά με βάσεις δεδομένων ξανά ευχάριστη.»
— Alex K., Database Developer
★★★★★
«Έχω δοκιμάσει πολλά GUI για βάσεις δεδομένων, αλλά το Beekeeper βρίσκει την τέλεια ισορροπία ανάμεσα σε δυνατότητες και απλότητα. Απλώς δουλεύει.»
— Sarah M., Full Stack Engineer

Έτοιμος να βελτιώσεις τη ροή εργασίας σου με SQL;

download Δωρεάν λήψη