首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL COUNT 函數細節全解析:支援 */欄位/常數/變數、DISTINCT、NULL 排除

     編輯:關於SqlServer

`COUNT` 不僅能數 `*`,還支援欄位、常數、變數、`DISTINCT` 修飾,且 `COUNT(欄位)` 會**忽略 NULL**。本文以範例表 `t_test`(含 `sql_variant` 欄位 a,b,c)示範各種用法與結果。

建立測試資料


IF OBJECT_ID('t_test') > 0 DROP TABLE t_test;
CREATE TABLE t_test (a SQL_VARIANT, b SQL_VARIANT, c SQL_VARIANT);
INSERT INTO t_test VALUES (1, 1, 'a');
INSERT INTO t_test VALUES (1, GETDATE(), NULL);
INSERT INTO t_test VALUES ('a', NULL, 1);
INSERT INTO t_test VALUES (3, NULL, NULL);
INSERT INTO t_test VALUES (NULL, NULL, NULL);

資料內容:

abc
11a
12024-01-15...NULL
aNULL1
3NULLNULL
NULLNULLNULL

綜合查詢與結果說明


SELECT
    COUNT(*)                         AS total_rows,          -- 5
    COUNT(NULLIF(1,1))               AS always_zero,         -- 0 (NULLIF 回傳 NULL)
    COUNT(a)                         AS cnt_a,               -- 4 (a 非 NULL 4 列)
    COUNT(b)                         AS cnt_b,               -- 2
    COUNT(DISTINCT a)                AS distinct_a,          -- 3 (1, 'a', 3)
    COUNT(ISNULL(b,c))               AS cnt_b_or_c,          -- 3 (b 或 c 非 NULL)
    COUNT(COALESCE(a,b,c))           AS cnt_any,             -- 4 (a/b/c 任一非 NULL)
    COUNT(NULLIF(a,b))               AS cnt_a_ne_b,          -- 4 (a<>b 者,NULLIF 回傳 a)
    COUNT(NULLIF(ISNUMERIC(CAST(a AS VARCHAR(38))),0)) AS cnt_a_numeric -- 3 (a 為數值者)
FROM t_test;

關鍵規則速記

  • `COUNT(*)`:計算**列數**,包含全 NULL 列。
  • `COUNT(欄位)`:計算該欄位**非 NULL 值個數**。
  • `COUNT(常數/變數)`:若常數非 NULL,等同 `COUNT(*)`;若為 `NULL`(如 `NULLIF(1,1)`),結果為 0。
  • `COUNT(DISTINCT 欄位)`:非 NULL 且去重複。
  • 巧用 `ISNULL/COALESCE/NULLIF` 組合實現條件計數(如「a 或 b 非 NULL」、「a 不等於 b」、「a 為數值」)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved