SQL 中 COUNT 的用法示例詳解
1. COUNT(*):統(tǒng)計總行數(shù)
COUNT(*) 是 SQL 中最常用的統(tǒng)計方式之一。它會統(tǒng)計查詢結果集中所有行的數(shù)量(包括 NULL 值)。
語法:
SELECT COUNT(*) FROM 表名;
示例: 假設我們有一個 employees 表,包含以下數(shù)據(jù):
| id | name | age | department |
|---|---|---|---|
| 1 | John Doe | 30 | Sales |
| 2 | Jane Smith | NULL | HR |
| 3 | Alice Brown | 25 | NULL |
執(zhí)行以下查詢:
SELECT COUNT(*) FROM employees;
結果:
3
解釋: COUNT(*) 會統(tǒng)計所有行,不會忽略 NULL 值,即使某些列有 NULL,它也會計算每一行。因此,結果為 3,表示表中共有 3 行數(shù)據(jù)。
2. COUNT(1):統(tǒng)計總行數(shù)
COUNT(1) 的作用與 COUNT(*) 類似,也會統(tǒng)計表中所有的行。它是 SQL 優(yōu)化中的一個小技巧,某些數(shù)據(jù)庫系統(tǒng)(如 MySQL)會對其進行優(yōu)化處理。
語法:
SELECT COUNT(1) FROM 表名;
解釋: COUNT(1) 和 COUNT(*) 的結果是相同的,都會返回表中所有行的數(shù)量。數(shù)據(jù)庫會將 1 替代成一個常量來參與計算,并且不會關心每一列的具體值。
優(yōu)化區(qū)別: 在某些數(shù)據(jù)庫系統(tǒng)(如 MySQL)中,COUNT(1) 和 COUNT(*) 在執(zhí)行計劃中的表現(xiàn)可能相同,查詢效率基本沒有區(qū)別。然而,某些舊版的數(shù)據(jù)庫系統(tǒng)在處理 COUNT(*) 時,會去解析整行數(shù)據(jù),而 COUNT(1) 可以直接統(tǒng)計行數(shù),因此會有一些微小的性能差異。
3. COUNT(列名):統(tǒng)計特定列中非 NULL 值的數(shù)量
與 COUNT(*) 不同,COUNT(列名) 只會統(tǒng)計指定列中非 NULL 值的數(shù)量。如果某列中有 NULL 值,COUNT(列名) 會自動跳過它們。
語法:
SELECT COUNT(列名) FROM 表名;
示例:
SELECT COUNT(age) FROM employees;
結果
2
4. COUNT(DISTINCT 列名):統(tǒng)計某列中不重復的非 NULL 值的數(shù)量
有時,我們不僅需要統(tǒng)計某列中的非 NULL 值,還需要統(tǒng)計不重復的值。在這種情況下,可以使用 COUNT(DISTINCT 列名) 來完成這個任務。
語法:
SELECT COUNT(DISTINCT 列名) FROM 表名;
示例: 假設我們有以下表數(shù)據(jù):
| id | department |
|---|---|
| 1 | Sales |
| 2 | HR |
| 3 | Sales |
| 4 | IT |
查詢:
SELECT COUNT(DISTINCT department) FROM employees;
結果:
3
解釋: 表中有三個不重復的 department 值:Sales, HR, IT。因此,COUNT(DISTINCT department) 返回 3,表示有 3 個不同的部門。
5. COUNT() 與 GROUP BY 的結合
COUNT() 函數(shù)經(jīng)常和 GROUP BY 子句結合使用,用于統(tǒng)計每個分組的數(shù)量。GROUP BY 按照某列對數(shù)據(jù)進行分組,COUNT() 則對每個分組內(nèi)的行數(shù)進行統(tǒng)計。
6. COUNT 與 HAVING 的結合
HAVING 子句通常與 GROUP BY 一起使用,用來過濾聚合結果。它可以用來限制返回的分組數(shù)量,條件可以基于 COUNT() 等聚合函數(shù)的結果。
7. COUNT 與 JOIN 的結合
在復雜的查詢中,COUNT() 函數(shù)可以與 JOIN 子句一起使用,統(tǒng)計與另一個表匹配的記錄數(shù)量。
示例:
SELECT d.department, COUNT(e.id) FROM departments d LEFT JOIN employees e ON d.id = e.department_id GROUP BY d.department;
解釋: 此查詢會返回每個部門中員工的數(shù)量,即使某些部門沒有員工,也會返回該部門的記錄(因為使用了 LEFT JOIN)。使用 COUNT(e.id) 統(tǒng)計每個部門中關聯(lián)的員工數(shù)量。
COUNT(*) 和 COUNT(1) 的區(qū)別
區(qū)別:
- 在大多數(shù)數(shù)據(jù)庫系統(tǒng)中,
COUNT(*)和COUNT(1)的性能幾乎相同。COUNT(*)會統(tǒng)計表中所有行,而不關心列內(nèi)容,而COUNT(1)則是將1作為一個固定值用于統(tǒng)計。 - 在某些數(shù)據(jù)庫系統(tǒng)中,
COUNT(1)被認為稍微高效一點,因為它不需要解析所有列,只是使用常量1來計數(shù)。
結論: 現(xiàn)代數(shù)據(jù)庫(如 MySQL)會對 COUNT(*) 和 COUNT(1) 做優(yōu)化處理,因此二者的性能差異幾乎可以忽略。選擇哪種方式可以根據(jù)個人習慣或項目規(guī)范。
總結
COUNT(*):統(tǒng)計表中所有行,包括NULL值。COUNT(1):與COUNT(*)類似,統(tǒng)計所有行。COUNT(列名):統(tǒng)計某列中非NULL值的數(shù)量。COUNT(DISTINCT 列名):統(tǒng)計某列中不重復的非NULL值。COUNT可與GROUP BY和HAVING等子句結合,進行復雜的分組統(tǒng)計和條件過濾。COUNT(*)和COUNT(1)在大多數(shù)數(shù)據(jù)庫中性能相同,可以按習慣使用。
到此這篇關于SQL 中 COUNT 的用法示例詳解的文章就介紹到這了,更多相關sql count用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- mysql count(*)分組之后IFNULL無效問題
- Sql根據(jù)不同條件統(tǒng)計總數(shù)的方法(count和sum)
- SQL中count(1)、count(*)?與?count(列名)的區(qū)別詳細解釋
- MySQL數(shù)據(jù)庫統(tǒng)計函數(shù)COUNT的使用及說明
- mysql?count()函數(shù)不計算null和空值問題
- mysql數(shù)據(jù)庫之count()函數(shù)和sum()函數(shù)用法及區(qū)別說明
- mysql一條sql查出多個條件不同的sum或count問題
- MySQL中的count(*)?和?count(1)?區(qū)別性能對比分析
相關文章
sqlserver 行列互轉(zhuǎn)實現(xiàn)小結
列轉(zhuǎn)行比較經(jīng)典,需要的朋友可以參考下。2010-04-04
系統(tǒng)存儲過程sp_MSforeachtable和sp_MSforeachdb使用說明
系統(tǒng)存儲過程sp_MSforeachtable和sp_MSforeachdb2009-09-09
sqlserver數(shù)據(jù)庫規(guī)模膨脹太大怎么優(yōu)化
數(shù)據(jù)庫規(guī)模膨脹是SQLServer數(shù)據(jù)庫運維中常見的問題之一,本文介紹了一些緩解膨脹問題的方法,包括增加內(nèi)存、數(shù)據(jù)壓縮、數(shù)據(jù)庫分區(qū)等,在實踐過程中,應根據(jù)具體情況,采取適當?shù)姆椒?以達到最優(yōu)的緩解膨脹問題的效果2024-02-02
巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行
這篇文章主要介紹了巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行,需要的朋友可以參考下2014-08-08
使用sqlplus創(chuàng)建DDL和DML操作方法
這篇文章主要介紹了使用sqlplus創(chuàng)建DDL和DML操作方法,需要的朋友可以參考下2018-04-04
sql server動態(tài)存儲過程按日期保存數(shù)據(jù)示例
,在sql server存儲過程中進行日期計算,按日期建表效率最高,下面就公司項目的部分動態(tài)存儲過程粘貼出來2014-08-08
SQL Server 數(shù)據(jù)庫中游標(Cursor)的使用方法與完整實例
SQLServer游標用于逐行處理結果集,DECLARE聲明游標,OPEN打開,FETCH獲取數(shù)據(jù),CLOSE關閉,DEALLOCATE釋放資源,避免大數(shù)據(jù)集時性能影響,操作結束后關閉釋放資源,本文介紹SQL Server 數(shù)據(jù)庫中游標(Cursor)的使用方法與實例,感興趣的朋友一起看看吧2025-02-02

