首页 > 解决方案 > SQL:选择语句,聚合函数列不带过滤器,另一列带过滤器

问题描述

我有选择查询的表,如下所示

SELECT
    AVG([ScoreAverage]) AS OverallAverage, 
    COUNT(*) AS ScoreCount 
FROM 
    [Score]

StatusId[Score]表中有另一列。

在上面的SELECT语句中,我想计算另一个聚合列COUNT(*) WHERE StatusId = 4

是否可以在同一个 select 语句中执行此操作,还是我需要单独查询?

SELECT
    AVG([ScoreAverage]) AS OverallAverage, 
    COUNT(*) AS ScoreCount, 
    COUNT(?Status where it is '4'?) AS CountOfStatusFour 
FROM
    [Score]

标签: sql

解决方案


您可以将条件聚合与case when表达式一起使用,如下所示:

select AVG([ScoreAverage]) AS OverallAverage, COUNT(*) AS ScoreCount, sum(case when Statusid ='4' then 1 else 0 end) AS CountOfStatusFour 
from [Score]

CountOfStatusFourStatusid仅在 for which为 '4'时才计算行数


推荐阅读