摘要:在本教程中,您将学习如何使用MySQL IF 函数根据给定条件返回一个值。
MySQL IF函数简介
MySQL IF
函数是 MySQL 控制流函数之一,它根据条件返回一个值。 IF
函数有时称为IF ELSE
或IF THEN ELSE
函数。
MySQL IF
函数的语法如下:
IF(expr,if_true_expr,if_false_expr)
Code language: SQL (Structured Query Language) (sql)
如果expr
计算结果为TRUE
,即expr
不为NULL
并且expr
不为 0,则IF
函数返回if_true_expr
,否则返回if_false_expr
IF
函数返回数字或字符串,具体取决于其使用方式。
我们在本教程中介绍的 IF 函数与IF 语句不同。
MySQL IF 函数示例
让我们通过几个例子来练习一下MySQL IF函数是如何工作的。
一个简单的 IF 函数示例
您可以直接在SELECT 语句中使用 IF 函数,而无需使用FROM
等子句,如下所示:
SELECT IF(1 = 2,'true','false'); -- false
Code language: SQL (Structured Query Language) (sql)
SELECT IF(1 = 1,' true','false'); -- true
Code language: SQL (Structured Query Language) (sql)
使用 MySQL IF 函数显示 N/A 而不是 NULL
我们来看看示例数据库中的customers
表中的数据。
在customers
表中,许多客户的state
列中没有状态数据,因此当我们选择客户时,状态列显示NULL
值,这对于报告目的没有意义。请参阅以下查询:
SELECT
customerNumber, customerName, state, country
FROM
customers;
Code language: SQL (Structured Query Language) (sql)
如果状态为 NULL,我们可以使用IF
函数返回 N/A 来改进输出,如下查询:
SELECT
customerNumber,
customerName,
IF(state IS NULL, 'N/A', state) state,
country
FROM
customers;
Code language: SQL (Structured Query Language) (sql)
MySQL IF 函数与聚合函数
MySQL SUM IF – 将 IF 函数与 SUM 函数相结合
IF
函数与聚合函数结合使用时非常有用。假设你想知道有多少订单已发货和取消,可以使用 IF 函数配合SUM 聚合函数,查询如下:
SELECT
SUM(IF(status = 'Shipped', 1, 0)) AS Shipped,
SUM(IF(status = 'Cancelled', 1, 0)) AS Cancelled
FROM
orders;
Code language: SQL (Structured Query Language) (sql)
在上面的查询中,如果订单状态为shipped
或cancelled
,则 IF 函数返回 1,否则返回SUM
函数根据IF
函数的返回值计算shipped
和cancelled
订单的总数。
MySQL COUNT IF – 将 IF 函数与 COUNT 函数结合起来
首先,我们使用以下查询在orders
表中选择不同订单的状态:
SELECT DISTINCT
status
FROM
orders
ORDER BY status;
Code language: SQL (Structured Query Language) (sql)
其次,我们可以通过IF
函数和COUNT
函数结合来获取每种状态下的订单数量。由于COUNT
函数不统计NULL
值,因此如果状态不处于选定状态,则IF
函数返回NULL
,否则返回 1。请参见以下查询:
SELECT
COUNT(IF(status = 'Cancelled', 1, NULL)) Cancelled,
COUNT(IF(status = 'Disputed', 1, NULL)) Disputed,
COUNT(IF(status = 'In Process', 1, NULL)) 'In Process',
COUNT(IF(status = 'On Hold', 1, NULL)) 'On Hold',
COUNT(IF(status = 'Resolved', 1, NULL)) 'Resolved',
COUNT(IF(status = 'Shipped', 1, NULL)) 'Shipped'
FROM
orders;
Code language: SQL (Structured Query Language) (sql)
当然,您可以使用GROUP BY 子句和COUNT
函数来获得类似的结果,而无需使用IF
函数,如以下查询:
SELECT status, COUNT(STATUS)
FROM orders
GROUP BY status
Code language: SQL (Structured Query Language) (sql)
在本教程中,我们向您介绍了 MySQL IF
函数,它可以帮助您编写在SELECT
子句中嵌入条件的查询。