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