Examples of case Expression
Result Set Transformations
- 行列转置
example
- 通过
GROUP BY得到TABLESELECT monthname(rental_date) rental_month, COUNT(*) num_rentals FROM rental WHERE rental_date BETWEEN '2005-05-01' AND '2005-08-01' GROUP BY monthname(rental_date); - 通过
CASE WHEN THEN ENDGROUP BYSELECT SUM(CASE WHEN monthname(rental_date) = 'May' THEN 1 ELSE 0 END) May_rentals, SUM(CASE WHEN monthname(rental_date) = 'June' THEN 1 ELSE 0 END) June_rentals, SUM(CASE WHEN monthname(rental_date) = 'July' THEN 1 ELSE 0 END) Junly_rentals FROM rental WHERE rental_date BETWEEN '2005-05-01' AND '2005-08-01'; 大概逻辑
- 通过
CASE判断是否符合条件,若符合条件,返回1,否则返回0 - 然后用
SUM加和计算得到个月份的频数
- 通过
- 通过
Checking for Existence
- demo
CASE WHEN EXISTS() THEN END
Division-by-Zero Errors
- example
SELECT c.first_name,c.last_name, sum(p.amount) tot_payment_amt, count(p.amount) num_payments, sum(p.amount) / CASE WHEN count(p.amount) = 0 THEN 1 ELSE count(p.amount) END avg_payment FROM customer c LEFT OUTER JOIN payment p on c.customer_id = p.customer_id GROUP BY c.first_name, c.last_name;判断分母是否为0,分母为0时,返回1
Conditional Updates
- example
UPDATE customer SET active = CASE 90 <= (SELECT datediff(now(), max(rental_date)) FROM rental r WHERE r.customer_id = customer.customer_id) THEN 0 ELSE 1 END WHERE active = 1;- 判断用户的活跃程度,将最近90天内未活跃的用户设定为0,否则设定为1
Handeling Null Values
- demo
WHEN $fld IS NULL THEN $true_return ELSE $else_return END;