翻譯|使用教程|編輯:李爽夏|2019-02-14 10:00:32.000|閱讀 276 次
概述:本篇文章介紹了如何獲取MySQL中的高級行數(shù)。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Navicat Premium是一個可連接多種數(shù)據(jù)庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數(shù)據(jù)庫,讓管理不同類型的數(shù)據(jù)庫更加的方便。
在上篇文章中,我們使用了原生COUNT()函數(shù)的不同變體來計算一個MySQL表中的行數(shù)。在這篇文章中,我們將以更復(fù)雜的方式使用COUNT()函數(shù)來計算唯一值以及滿足條件的值。
COUNT(DISTINCT)函數(shù)返回具有唯一非空值的行數(shù)。因此,包含DISTINCT關(guān)鍵字將從計數(shù)中刪除重復(fù)的行。它的語法是:
COUNT(DISTINCT expr,[expr...])
與常規(guī)COUNT()函數(shù)一樣,上面的expr參數(shù)可以是任何給定的表達(dá)式,包括特定的列、所有列(*)、函數(shù)返回值或表達(dá)式(如IF/CASE 語句)。
假設(shè)我們有下表的客戶:
+------------+-------------+ | last_name | first_name | +------------+-------------+ | Tannen | Biff | +------------+-------------+ | McFly | Marty | +------------+-------------+ | Brown | Dr. Emmett | +------------+-------------+ | McFly | George | +------------+-------------+
調(diào)用COUNT(*)將返回所有行的數(shù)目(4),而姓氏上的非重復(fù)計數(shù)將把姓氏重復(fù)的每一行計數(shù)為1,這樣我們得到的總數(shù)為3:
SELECT COUNT(*), COUNT(DISTINCT last_name) FROM clients; +----------+---------------------------+ | COUNT(*) | COUNT(DISTINCT last_name) | +----------+---------------------------+ | 4 | 3 | +----------+---------------------------+
如上所述,COUNT()函數(shù)參數(shù)不限于列名;函數(shù)返回值和表達(dá)式(如IF/CASE 語句)也是公平的。
這是一個包含多個用戶電話號碼和性別的表(為了簡單起見,限制為兩個):
+------------+---------+ | tel | sex | +------------+---------+ | 7136609221 | male | +------------+---------+ | 7136609222 | male | +------------+---------+ | 7136609223 | female | +------------+---------+ | 7136609228 | male | +------------+---------+ | 7136609222 | male | +------------+---------+ | 7136609223 | female | +------------+---------+
假設(shè)我們想要構(gòu)建一個查詢,告訴我們表中有多少不同的男女。該人員通過其電話('tel')號碼進(jìn)行識別。同一個“tel”可能出現(xiàn)多次,但該tel的性別只應(yīng)計算一次。
這里有一個選項,對每列使用不同的計數(shù):
SELECT COUNT(DISTINCT tel) gender_count, COUNT(DISTINCT CASE WHEN gender = 'male' THEN tel END) male_count, COUNT(DISTINCT CASE WHEN gender = 'female' THEN tel END) female_count FROM people
此SELECT語句將生成以下內(nèi)容:
+--------------+------------+---------------+ | gender_count | male_count | female_count | +--------------+------------+---------------+ | 4 | 3 | 1 | +--------------+------------+---------------+
還可以使用GROUP BY垂直堆疊計數(shù):
+---------+-------+ | GroupId | Count | +---------+-------+ | 1 | 5 | +---------+-------+ | 2 | 4 | +---------+-------+ | 3 | 7 | +---------+-------+ | Total: | 11 | +---------+-------+
“total:”是使用SQL GROUPING()函數(shù)生成的,該函數(shù)添加在MySQL 8.0.1中。它將表示超級聚合行(由匯總生成)中所有值的集合的空值與常規(guī)行中的空值區(qū)分開來。
以下是完整的SQL:
Select Case When Grouping(GroupId) = 1 Then 'Total:' Else GroupId End As GroupId, Count(*) Count From user_groups Group By GroupId With Rollup Order By Grouping(GroupId), GroupId
下篇文章,我們將從多個表和視圖中獲取行計數(shù)。
購買Navicat Premium正版授權(quán),請點擊“”喲!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn