Skip to content

COUNT

功能描述

计算返回的行数。

语法格式

COUNT({ * | [ DISTINCT | ALL ] expr })
   [ OVER (analytic_clause) ]

参数说明

  • expr:列名、表达式、子查询或符号*,用来指定要计数的数据。
  • OVER(analytic_clause):可选的表达式,用于分析函数。analytic_clause是常用的分析类语句,如PARTITION BY等。如果指定了参数DISTINCT,则该部分只能指定PARTITION BY子句 ,而不能使用ORDER BY和开窗相关的语法。

函数返回类型

BIGINT类型。

示例

sql
SQL> CREATE TABLE employees (
        employee_id INT IDENTITY(1,1) PRIMARY KEY,
        manager_id INT NOT NULL,
        last_name VARCHAR(50) NOT NULL,
        hire_date DATE NOT NULL,
        salary NUMERIC(10, 2) NOT NULL
    );

SQL> INSERT INTO employees (manager_id, last_name, hire_date, salary) VALUES
    (100, 'De Haan', TO_DATE('2001-01-13', 'YYYY-MM-DD'), 17000),
    (100, 'Raphaely', TO_DATE('2002-12-07', 'YYYY-MM-DD'), 11000),
    (100, 'Kaufling', TO_DATE('2003-05-01', 'YYYY-MM-DD'), 7900),
    (100, 'Hartstein', TO_DATE('2004-02-17', 'YYYY-MM-DD'), 13000),
    (100, 'Weiss', TO_DATE('2004-07-18', 'YYYY-MM-DD'), 8000),
    (100, 'Russell', TO_DATE('2004-10-01', 'YYYY-MM-DD'), 14000);

聚合函数

sql
SQL> SELECT COUNT(*) "Total" FROM employees;

Total | 
------------------------------------------------------------------------------
6 |

SQL> SELECT COUNT(DISTINCT manager_id) "Managers" FROM employees;

Managers | 
------------------------------------------------------------------------------
1 |

分析函数

sql
SQL> SELECT last_name, salary,
         COUNT(*) OVER (
           ORDER BY salary
           RANGE BETWEEN 50 PRECEDING AND 150 FOLLOWING
         ) AS mov_count
    FROM employees;

LAST_NAME | SALARY | MOV_COUNT | 
------------------------------------------------------------------------------
Kaufling| 7900| 2 |
Weiss| 8000| 1 |
Raphaely| 11000| 1 |
Hartstein| 13000| 1 |
Russell| 14000| 1 |
De Haan| 17000| 1 |