如何在单条数据库查询中按指定条件分别统计对应行数
问题描述
现有一张包含type、value两个字段的数据表,表结构与示例数据如下:
type | value num 1 email @ name Oli
需要通过单条查询完成多条件行数统计,分别统计三类缺失记录的行数:
- 不存在
num对应记录的行数 - 不存在
email对应记录的行数 - 不存在
name对应记录的行数
实现方法
通过标准SQL的条件聚合能力,就可以用单条查询完成三个维度的行数统计,无需多次查询表数据,所有支持SQL92标准的数据库都可以使用该写法:
SELECT SUM(CASE WHEN type <> 'num' THEN 1 ELSE 0 END) AS missing_num_count, SUM(CASE WHEN type <> 'email' THEN 1 ELSE 0 END) AS missing_email_count, SUM(CASE WHEN type <> 'name' THEN 1 ELSE 0 END) AS missing_name_count FROM 替换为你的实际表名;
如果你的统计需求是判断整张表中是否存在对应type的记录(不存在记1,存在记0,而非逐行统计),可以使用如下写法:
SELECT CASE WHEN COUNT(CASE WHEN type = 'num' THEN 1 END) = 0 THEN 1 ELSE 0 END AS num_not_exists, CASE WHEN COUNT(CASE WHEN type = 'email' THEN 1 END) = 0 THEN 1 ELSE 0 END AS email_not_exists, CASE WHEN COUNT(CASE WHEN type = 'name' THEN 1 END) = 0 THEN 1 ELSE 0 END AS name_not_exists FROM 替换为你的实际表名;
内容的提问来源于stack exchange,提问作者Stasia
相关产品推荐
相关产品推荐

