Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I use properly CASE..WHEN in MySQL

Here is a demo query, notice it is very simple, Fetches only where base_price is 0, And still, it chooses the condition 3:

SELECT    CASE course_enrollment_settings.base_price     WHEN course_enrollment_settings.base_price = 0      THEN 1     WHEN course_enrollment_settings.base_price<101      THEN 2     WHEN course_enrollment_settings.base_price>100 AND                          course_enrollment_settings.base_price<201 THEN 3         ELSE 6    END AS 'calc_base_price',    course_enrollment_settings.base_price FROM     course_enrollment_settings WHERE course_enrollment_settings.base_price = 0 

base_price is decimal(8,0)

When run this on my DB, I get:

3 0
3 0
3 0
3 0
3 0

like image 477
Itay Moav -Malimovka Avatar asked Mar 06 '12 16:03

Itay Moav -Malimovka


People also ask

Can we use CASE in MySQL?

MySQL CASE expression is a control flow structure that allows you to add if-else logic to a query. Generally speaking, you can use the CASE expression anywhere that allows a valid expression e.g., SELECT , WHERE and ORDER BY clauses. The CASE expression has two forms: simple CASE and searched CASE .

How does CASE work in MySQL?

The CASE statement goes through conditions and return a value when the first condition is met (like an IF-THEN-ELSE statement). So, once a condition is true, it will stop reading and return the result. If no conditions are true, it will return the value in the ELSE clause.

Can we use CASE in WHERE condition in SQL?

CASE can be used in any statement or clause that allows a valid expression. For example, you can use CASE in statements such as SELECT, UPDATE, DELETE and SET, and in clauses such as select_list, IN, WHERE, ORDER BY, and HAVING.


1 Answers

Remove the course_enrollment_settings.base_price immediately after CASE:

SELECT    CASE     WHEN course_enrollment_settings.base_price = 0      THEN 1     ...     END 

CASE has two different forms, as detailed in the manual. Here, you want the second form since you're using search conditions.

like image 154
NPE Avatar answered Oct 26 '22 22:10

NPE