MySQL IF Function

摘要:在本教程中,您将学习如何使用MySQL IF 函数根据给定条件返回一个值。

MySQL IF函数简介

MySQL IF函数是 MySQL 控制流函数之一,它根据条件返回一个值。 IF函数有时称为IF ELSEIF 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'); -- falseCode language: SQL (Structured Query Language) (sql)

试试看

SELECT IF(1 = 1,' true','false'); -- trueCode 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)

试试看

MySQL IF 客户表

如果状态为 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 N/A 而不是 NULL

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)

试试看

MySQL 求和

在上面的查询中,如果订单状态为shippedcancelled 则 IF 函数返回 1,否则返回SUM函数根据IF函数的返回值计算shippedcancelled订单的总数。

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)

试试看

MySQL COUNT IF - orders' status

当然,您可以使用GROUP BY 子句COUNT函数来获得类似的结果,而无需使用IF函数,如以下查询:

SELECT status, COUNT(STATUS)
FROM orders
GROUP BY statusCode language: SQL (Structured Query Language) (sql)

试试看

在本教程中,我们向您介绍了 MySQL IF函数,它可以帮助您编写在SELECT子句中嵌入条件的查询。

参考

本教程有帮助吗?