IF函数
MySQL提供了IF()函数用于逻辑判断,其语法格式如下:
IF(expr1,expr2,expr3)
如果expr1为真,那么IF()返回expr2,否则返回expr3。
比如执行下面的SQL语句,检索2009-01-02当天的销售金额是否达标:
SELECT 订单编号,销售金额,IF(销售金额>300,'达标','未达标') AS 是否达标 FROM demo_salesday WHERE 订购日期='2009-01-02';
执行完毕我们能看到下面的结果:
+----------+-----------+----------+
| 订单编号 | 销售金额 | 是否达标 |
+----------+-----------+----------+
| 100329 | 281.08000 | 未达标 |
| 100361 | 348.71000 | 达标 |
| 100334 | 292.36000 | 未达标 |
| 100286 | 206.15000 | 未达标 |
| 100335 | 388.04000 | 达标 |
| 100352 | 325.65000 | 达标 |
| 100304 | 307.91000 | 达标 |
| 100235 | 278.05000 | 未达标 |
| 100390 | 288.62000 | 未达标 |
| 100254 | 206.45000 | 未达标 |
| 100325 | 308.87000 | 达标 |
+----------+-----------+----------+
CASE函数
对于复杂的逻辑判断,SQL提供了CASE函数,其标准语法如下:
CASE
WHEN condition1 THEN returnvalue1
WHEN condition2 THEN returnvalue2
WHEN condition3 THEN returnvalue3
……
ELSE defaultreturnvalue
END
CASE函数对表达式condition进行测试,如果condition1满足则返回returnvalue1;如果condition2满足则返回returnvalue2;如果condition3满足则返回returnvalue3……,以此类推,如果不符合所有的WHEN条件,则返回默认值defaultreturnvalue。
CASE函数在制作报表的时候非常有用,比如我们对刚才的例子进行更细的分析,如果销售金额大于350则为优秀,销售金额小于300为不达标,300到350为达标,SQL语句如下:
SELECT 订单编号,销售金额,
(CASE
WHEN 销售金额>350 THEN '优秀'
WHEN 销售金额<300 THEN '未达标'
ELSE '达标'
END) AS 成绩
FROM demo_salesday WHERE 订购日期='2009-01-02';
执行完毕我们能看到下面的结果:
+----------+-----------+--------+
| 订单编号 | 销售金额 | 成绩 |
+----------+-----------+--------+
| 100329 | 281.08000 | 未达标 |
| 100361 | 348.71000 | 达标 |
| 100334 | 292.36000 | 未达标 |
| 100286 | 206.15000 | 未达标 |
| 100335 | 388.04000 | 优秀 |
| 100352 | 325.65000 | 达标 |
| 100304 | 307.91000 | 达标 |
| 100235 | 278.05000 | 未达标 |
| 100390 | 288.62000 | 未达标 |
| 100254 | 206.45000 | 未达标 |
| 100325 | 308.87000 | 达标 |
+----------+-----------+--------+