轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-03-30 10:42:46.947|閱讀 408 次
概述:在上周的“在 MySQL 中獲取行計(jì)數(shù)”文章中,我們采用了原生的 COUNT() 函數(shù)的不同變體來(lái)計(jì)算一個(gè) MySQL 表中的行數(shù)。在今天的后續(xù)文章中,我們將以更復(fù)雜的方式使用 COUNT() 函數(shù)來(lái)計(jì)算唯一值以及滿(mǎn)足條件的值。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
在上周的“在 MySQL 中獲取行計(jì)數(shù)”文章中,我們采用了原生的 COUNT() 函數(shù)的不同變體來(lái)計(jì)算一個(gè) MySQL 表中的行數(shù)。在今天的后續(xù)文章中,我們將以更復(fù)雜的方式使用 COUNT() 函數(shù)來(lái)計(jì)算唯一值以及滿(mǎn)足條件的值。
計(jì)算非重復(fù)項(xiàng)
COUNT(DISTINCT) 函數(shù)返回具有唯一非 NULL 值的行數(shù)。因此,包含 DISTINCT 關(guān)鍵字可以消除計(jì)數(shù)中的重復(fù)行。它的語(yǔ)法是:
COUNT(DISTINCT expr,[expr...])與正則 COUNT() 函數(shù)一樣,上面的 expr 參數(shù)可以是任何給定的表達(dá)式,包括指定的列、所有列(*)、函數(shù)返回值或表達(dá)式(如 IF/CASE 語(yǔ)句)。
簡(jiǎn)單的例子
假設(shè)我們有以下 clients 表:
+------------+-------------+調(diào)用 COUNT(*) 將返回所有行的數(shù)量(4),而在 last_name 上使用 COUNT DISTINCT 將計(jì)算重復(fù)姓氏的行為 1,這樣我們得到總數(shù) 3:
SELECT COUNT(*), COUNT(DISTINCT last_name) FROM clients;使用表達(dá)式的條件性計(jì)數(shù)
如上所述,COUNT() 函數(shù)參數(shù)不限于列名,也可以是函數(shù)返回值和表達(dá)式(如 IF/CASE 語(yǔ)句)。
這是一個(gè)包含多個(gè)用戶(hù)的電話(huà)號(hào)碼和性別的表(為簡(jiǎn)單起見(jiàn)只有兩列):
+------------+---------+假設(shè)我們想要建立一個(gè)查詢(xún),讓我們知道表中有多少不同的女性和男性。用戶(hù)是通過(guò)他們的電話(huà)號(hào)碼(tel)識(shí)別。同一個(gè)“tel”可能會(huì)出現(xiàn)多次,但 tel 的性別應(yīng)該只計(jì)算一次。
這是為每列使用單獨(dú)的 COUNT DISTINCT 的一個(gè)選項(xiàng):
SELECT COUNT(DISTINCT tel) gender_count,這個(gè) SELECT 語(yǔ)句將產(chǎn)生以下結(jié)果:
+--------------+------------+---------------+額外提示-分組并包括總計(jì)
你還可以使用 GROUP BY 垂直堆疊計(jì)數(shù):
+---------+-------+“Total:”是使用 SQL GROUPING() 函數(shù)生成的,該函數(shù)已在 MySQL 8.0.1 中添加。它將表示超級(jí)聚合行(由 ROLLUP 生成)中所有的值的集合的 NULL 與正則行中的NULL 區(qū)分起來(lái)。
這是完整的 SQL:
Select Case When Grouping(GroupId) = 1下周,我們將從多個(gè)表和視圖中獲取行計(jì)數(shù)。
在上周的“在 MySQL 中獲取行計(jì)數(shù)”文章中,我們采用了原生的 COUNT() 函數(shù)的不同變體來(lái)計(jì)算一個(gè) MySQL 表中的行數(shù)。在今天的后續(xù)文章中,我們將以更復(fù)雜的方式使用 COUNT() 函數(shù)來(lái)計(jì)算唯一值以及滿(mǎn)足條件的值。
計(jì)算非重復(fù)項(xiàng)
COUNT(DISTINCT) 函數(shù)返回具有唯一非 NULL 值的行數(shù)。因此,包含 DISTINCT 關(guān)鍵字可以消除計(jì)數(shù)中的重復(fù)行。它的語(yǔ)法是:
COUNT(DISTINCT expr,[expr...])與正則 COUNT() 函數(shù)一樣,上面的 expr 參數(shù)可以是任何給定的表達(dá)式,包括指定的列、所有列(*)、函數(shù)返回值或表達(dá)式(如 IF/CASE 語(yǔ)句)。
簡(jiǎn)單的例子
假設(shè)我們有以下 clients 表:
+------------+-------------+調(diào)用 COUNT(*) 將返回所有行的數(shù)量(4),而在 last_name 上使用 COUNT DISTINCT 將計(jì)算重復(fù)姓氏的行為 1,這樣我們得到總數(shù) 3:
SELECT COUNT(*), COUNT(DISTINCT last_name) FROM clients;使用表達(dá)式的條件性計(jì)數(shù)
如上所述,COUNT() 函數(shù)參數(shù)不限于列名,也可以是函數(shù)返回值和表達(dá)式(如 IF/CASE 語(yǔ)句)。
這是一個(gè)包含多個(gè)用戶(hù)的電話(huà)號(hào)碼和性別的表(為簡(jiǎn)單起見(jiàn)只有兩列):
+------------+---------+假設(shè)我們想要建立一個(gè)查詢(xún),讓我們知道表中有多少不同的女性和男性。用戶(hù)是通過(guò)他們的電話(huà)號(hào)碼(tel)識(shí)別。同一個(gè)“tel”可能會(huì)出現(xiàn)多次,但 tel 的性別應(yīng)該只計(jì)算一次。
這是為每列使用單獨(dú)的 COUNT DISTINCT 的一個(gè)選項(xiàng):
SELECT COUNT(DISTINCT tel) gender_count,這個(gè) SELECT 語(yǔ)句將產(chǎn)生以下結(jié)果:
+--------------+------------+---------------+額外提示-分組并包括總計(jì)
你還可以使用 GROUP BY 垂直堆疊計(jì)數(shù):
+---------+-------+“Total:”是使用 SQL GROUPING() 函數(shù)生成的,該函數(shù)已在 MySQL 8.0.1 中添加。它將表示超級(jí)聚合行(由 ROLLUP 生成)中所有的值的集合的 NULL 與正則行中的NULL 區(qū)分起來(lái)。
這是完整的 SQL:
Select Case When Grouping(GroupId) = 1下周,我們將從多個(gè)表和視圖中獲取行計(jì)數(shù)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: