Oracle_Count函数

本文深入探讨了SQL中COUNT函数的用法,包括作为聚合函数和分析函数的应用,提供了多个示例,详细解释了其返回值、语法、参数及注意事项。

COUNT

Syntax

Description of count.gif follows
Description of the illustration count.gif

See Also:

"Analytic Functions" for information on syntax, semantics, and restrictions

Purpose

COUNT returns the number of rows returned by the query. You can use it as an aggregate or analytic function.

If you specify DISTINCT, then you can specify only the query_partition_clause of the analytic_clause. The order_by_clause and windowing_clause are not allowed.

If you specify expr, then COUNT returns the number of rows where expr is not null. You can count either all rows, or only distinct values of expr.

If you specify the asterisk (*), then this function returns all rows, including duplicates and nulls. COUNT never returns null.

See Also:

"About SQL Expressions" for information on valid forms of expr and "Aggregate Functions"

Aggregate Examples

The following examples use COUNT as an aggregate function:

SELECT COUNT(*) "Total"
  FROM employees;

     Total
----------
       107

SELECT COUNT(*) "Allstars"
  FROM employees
  WHERE commission_pct > 0;

 Allstars
---------
       35

SELECT COUNT(commission_pct) "Count"
  FROM employees;

     Count
----------
        35

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

  Managers
----------
        18

Analytic Example

The following example calculates, for each employee in the employees table, the moving count of employees earning salaries in the range 50 less than through 150 greater than the employee's salary.

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

LAST_NAME                     SALARY  MOV_COUNT
------------------------- ---------- ----------
Olson                           2100          3
Markle                          2200          2
Philtanker                      2200          2
Gee                             2400          8
Landry                          2400          8
Colmenares                      2500         10
Marlow                          2500         10
Patel                           2500         10

SQL> select comm from emp;

      COMM
----------

       300
       500

      1400




         0


      COMM
----------




14 rows selected.

SQL> select distinct comm from emp;

      COMM
----------

      1400
       500
       300
         0

5 rows selected.

SQL> select comm from emp;

      COMM
----------

       300
       500

      1400




         0


      COMM
----------




14 rows selected.

SQL> select distinct comm from emp;

      COMM
----------

      1400
       500
       300
         0

5 rows selected.

SQL> select count(comm) from emp where comm is not null;

COUNT(COMM)
-----------
          4

1 row selected.

SQL> select count(comm) from emp where comm is null;

COUNT(COMM)
-----------
          0

1 row selected.

总结:count(*)结果包含NULL行,count(某一列)不包含空行。


<think>好的,我现在需要回答用户关于Oracle数据库中COUNT函数使用方法的问题。首先,我要回忆一下COUNT函数的基本用法,以及用户可能关心的高级用法,比如条件统计。根据用户提供的引用资料,特别是引用[2]和[4],里面提到了COUNT作为聚合函数,可以计算行数,并且支持条件判断。首先,基础部分:COUNT(*)是统计所有行数,包括NULL值。COUNT(列名)则是统计该列非NULL的行数。这部分需要明确区分,避免混淆。比如,用户可能想知道COUNT(1)和COUNT(*)的区别,但根据标准回答,这两者在Oracle中效果相同。接下来是条件统计,用户可能想了解如何在COUNT中使用条件。根据引用[4],Oracle可以使用CASE WHEN或者DECODE函数来实现条件统计。例如,COUNT(CASE WHEN条件 THEN1ELSENULL END)。这里需要注意,必须将不符合条件的设为NULL,否则会统计所有行。DECODE函数也是一个选择,可能更简洁,但可读性稍差。然后,示例部分非常重要。用户需要具体的例子来理解如何应用。比如统计不同部门的员工数量,或者统计薪资超过5000的员工数。需要给出具体的SQL语句,并解释每个部分的作用。同时,要提到SUM函数也可以实现类似的效果,但COUNT更直观,因为直接统计符合条件的行数。另外,用户提供的引用中提到DECODE函数在MySQL不适用,但这里主要讨论Oracle,所以可以安全使用DECODE。需要注意函数在不同数据库中的兼容性问题,但用户的问题集中在Oracle,所以不需要展开。可能还需要提到性能方面的考虑,比如在条件统计时,使用COUNT和CASEWHEN是否会影响查询效率,或者是否有更优化的方法。不过根据引用资料,没有提到性能问题,所以可能暂时不需要深入,除非用户特别问及。 最后,生成相关问题。需要考虑用户可能的后续问题,比如COUNT与其他聚合函数的区别,如何处理NULL值,或者更复杂的条件组合。例如,如何同时统计多个条件,或者使用COUNT DISTINCT等。 检查是否有遗漏点,比如COUNT(DISTINCT列名)的用法,或者与其他聚合函数结合使用的情况。根据用户的问题,可能不需要太深入,但如果有相关引用资料,可以适当提及。引用[3]提到COUNT与NULL的关系,所以需要强调在条件统计中设置NULL的重要性。 总结回答结构:先介绍基本语法,再分点详细说明不同用法,每个用法配示例,最后总结注意事项。确保语言简洁,符合中文习惯,正确使用LaTeX格式,特别是行内公式和独立公式的正确标注,但这里可能不需要数学公式,主要涉及SQL语句,所以用代码块表示。最后验证示例是否正确,比如在条件统计中使用CASEWHEN是否正确,DECODE的写法是否合适。确保示例可以直接运行,不会出现语法错误。同时,注意代码格式使用反引号,并标明语言类型,如SQL。</think>### Oracle COUNT函数使用方法详解 #### 一、基础语法 1. **统计所有行数** ```sql SELECT COUNT(*) FROM 表名; ``` 示例:统计`employees`表总行数 ```sql SELECT COUNT(*) FROM employees; ``` 2. **统计某列非空值数量** ```sql SELECT COUNT(列名) FROM 表名; ``` 示例:统计`employees`表中`salary`非空的行数 ```sql SELECT COUNT(salary) FROM employees; ``` --- #### 二、条件统计 通过`CASE WHEN`或`DECODE`实现条件过滤,**仅统计符合条件的行**。 1. **使用CASE WHEN** ```sql SELECT COUNT(CASE WHEN 条件 THEN 1 ELSE NULL END) FROM 表名; ``` 示例:统计薪资超过5000的员工数量 ```sql SELECT COUNT(CASE WHEN salary > 5000 THEN 1 END) FROM employees; ``` 2. **使用DECODE函数** ```sql SELECT COUNT(DECODE(条件, 满足条件时的值, 1, NULL)) FROM 表名; ``` 示例:统计部门ID为10的员工数量 ```sql SELECT COUNT(DECODE(department_id, 10, 1, NULL)) FROM employees; ``` --- #### 三、分组统计 结合`GROUP BY`按维度分组统计: ```sql SELECT 分组列, COUNT(*) FROM 表名 GROUP BY 分组列; ``` 示例:统计各部门员工数量 ```sql SELECT department_id, COUNT(*) FROM employees GROUP BY department_id; ``` --- #### 四、注意事项 1. **NULL值处理**:`COUNT(列名)`会忽略该列的NULL值,而`COUNT(*)`不会[^3]。 2. **性能优化**:在大数据表中,明确指定列名(如`COUNT(1)`)可能比`COUNT(*)`更高效(但Oracle优化器通常会自动处理)[^2]。 3. **条件逻辑**:在条件统计中,必须将不符合条件的值设为`NULL`,否则会统计所有行[^4]。 --- #### 五、完整示例 ```sql -- 统计各部门薪资超过5000的员工数量 SELECT department_id, COUNT(CASE WHEN salary > 5000 THEN 1 END) AS high_salary_count FROM employees GROUP BY department_id; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值