You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL中不使用GROUP BY子句时如何使用COUNT函数

Oracle SQL 无GROUP BY子句时COUNT函数的使用方案

首先明确:COUNT本身是聚合函数,默认不写GROUP BY时,会将整个匹配WHERE条件的数据集作为一个分组聚合,返回单行结果,本身就是合法用法。常见的使用场景和实现如下:

基础用法:单维度计数

直接调用COUNT函数即可,不需要额外加GROUP BY:

-- 统计整张表的总记录数
SELECT COUNT(*) FROM education;

-- 统计满足过滤条件的记录数
SELECT COUNT(*) FROM education WHERE status = 'APPROVED';

进阶用法:同一句SQL统计多个不同维度的计数

如果需要同时返回多个不同过滤规则的计数值,不需要GROUP BY,有两种常用实现:

方案1:标量子查询实现(对应参考示例)

每个维度的计数单独写一个返回单个值的子查询,放到SELECT字段列表中即可:

SELECT COUNT(*) AS "Total orders",
       NVL(
         (SELECT COUNT(*)
          FROM   education
          WHERE status='APPROVED'),
         0
       ) AS "Number of approved requests"
FROM   education

逻辑说明:外层COUNT统计全表总记录数,子查询单独统计审批通过的记录数,外层套NVL是为了避免没有匹配记录时返回空值,兜底返回0。

方案2:CASE表达式配合COUNT实现(更推荐,性能更优)

该方案只需要扫描一次表,比标量子查询的多表扫描效率更高:

SELECT COUNT(*) AS "Total orders",
       COUNT(CASE WHEN status = 'APPROVED' THEN 1 END) AS "Number of approved requests"
FROM education

逻辑说明:CASE表达式只会把满足status='APPROVED'的行返回非空值,COUNT计数时会自动忽略空值,从而得到符合条件的记录数,不需要额外加GROUP BY。

内容的提问来源于stack exchange,提问作者Noorhan Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:36:06