【发布时间】:2013-03-25 13:51:56
【问题描述】:
我的查询中需要有两个聚合函数,但不知道如何过滤。
我需要样本数和大于1的样本数。
类似:
SELECT COUNT(Samples), COUNT(Samples >1)
FROM SampleData
我可以做一个子查询,但有没有更好的过滤方式?
【问题讨论】:
标签: sql where aggregates
我的查询中需要有两个聚合函数,但不知道如何过滤。
我需要样本数和大于1的样本数。
类似:
SELECT COUNT(Samples), COUNT(Samples >1)
FROM SampleData
我可以做一个子查询,但有没有更好的过滤方式?
【问题讨论】:
标签: sql where aggregates
您基本上可以使用CASE 获得Sample 的值,其结果是通过SUM() 聚合。
SELECT COUNT(Samples),
SUM(CASE WHEN Samples > 1 THEN 1 ELSE 0 END)
FROM SampleData
不过,这将适用于大多数 RDBMS。
【讨论】:
要获得记录数,请参阅 JW 的回答。同样,要获得样本的总值,以及samples>1的样本的总值,使用:
SELECT SUM(Samples) TotalSamples,
SUM(CASE WHEN Samples > 1 THEN Samples ELSE 0 END) SamplesGT1
FROM SampleData
【讨论】:
如果您使用的是 PostgreSQL,则可以使用标准 SQL FILTER 子句:
SELECT COUNT(*), COUNT(*) FILTER (WHERE Samples > 1)
FROM SampleData
【讨论】: