共計 1227 個字符,預計需要花費 4 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
今天就跟大家聊聊有關怎么在 mysql 中使用 if 函數,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
具體場景如下,
先看看表結構:
CREATE TABLE `message` ( `id` varchar(30) NOT NULL,
`title` varchar(30) DEFAULT NULL,
`content` text,
`send_time` datetime DEFAULT NULL,
`type` int(1) DEFAULT NULL COMMENT 1: 系統通知,2:投訴建議 ,
`status` int(1) DEFAULT NULL COMMENT 0:待發送,1:成功,2:失敗 ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
具體要求是:分別統計系統通知和投訴建議兩種消息的總條數、成功條數和失敗條數。
遇到這樣的問題,我們一般的思路就是用 type 分組,分別查詢系統通知和投訴建議的總條數,然后用兩個子查詢來統計成功條數和失敗條數。sql 如下:
SELECT
COUNT(1) total,
m.type,
(SELECT
COUNT(1)
FROM message ms
WHERE ms.status = 1
AND m.type = ms.type) successtotal,
(SELECT
COUNT(1)
FROM message mf
WHERE mf.status = 1
AND m.type = mf.type) failtotal
FROM message m
GROUP BY m.type
我們看看運行時間,統計 1 千萬條數據大概需要 6 分 18 秒。
那么有沒有更簡單,更快的統計方式呢,當然是有的,就是我們今天主要講的 if() 函數。
基本語法
IF(expr1,expr2,expr3),如果 expr1 的值為 true,則返回 expr2 的值,如果 expr1 的值為 false,則返回 expr3 的值。就是一個簡單的三目表達式。
如何做
說說思路,假如我們統計成功條數,我們可以這樣寫 if(status=1,1,0),這樣如果 status==1,則返回 1,否則返回 0。然后我們通過 SUM() 函數將成功條數相加即可。
實現方式
sql 語句如下:
SELECT
COUNT(1) total,
m.type,
SUM(IF(m.status = 1,1,0)) successtotal,
SUM(IF(m.status != 1,1,0)) failtotal
FROM message m
GROUP BY m.type;
看完上述內容,你們對怎么在 mysql 中使用 if 函數有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。
向 AI 問一下細節