在使用CASE stmt的SQL查询中,字段的1个值的计数不适用于其他值

在使用CASE stmt的SQL查询中,字段的1个值的计数不适用于其他值,sql,Sql,请帮我解决一个问题,我想得到一个字段的1个值的和/计数,让我们计算一下balls字段中的红色球。现在我用case语句来计算红球的数量,但是case也给出了其他球的数量。我只找1个记录,比如说红球数为5 SELECT b.ball_id, b.color, CASE WHEN b.color = 'Red' THEN COUNT(DISTINCT b.ball_id) END FROM ball_table b GROUP BY 1, 2 预期结果-1条记录

请帮我解决一个问题,我想得到一个字段的1个值的和/计数,让我们计算一下balls字段中的红色球。现在我用case语句来计算红球的数量,但是case也给出了其他球的数量。我只找1个记录,比如说红球数为5

SELECT 
    b.ball_id, b.color,
    CASE WHEN b.color = 'Red' THEN COUNT(DISTINCT b.ball_id) END 
FROM
    ball_table b 
GROUP BY
    1, 2
预期结果-1条记录仅说明红色球为5 我得到的是每个彩色球的计数,比如红色,黑色是9,以此类推。

使用总和

SELECT b.ball_id,
b.color,
sum(CASE WHEN b.color='Red' then 1 END )
from ball_table b 
group by 1,2
这是你的问题

SELECT     
  count(1) as ct
from ball_table
where color ='Red'

您需要以下两个表达式之一:

SELECT b.ball_id,
       SUM(CASE WHEN b.color = 'Red' THEN 1 ELSE 0 END) as num_red_rows,
       COUNT(DISTINCT CASE WHEN b.color = 'Red' THEN b.ball_id END)) as num_red_distinct_ids
FROM ball_table b 
GROUP BY b.ball_id;

我猜
ball\u id
是唯一的,因此您需要
num\u red\u rows

的表达式将大小写表达式放在计数中。示例数据和预期结果在这里会有所帮助。列,而不是字段<代码>大小写表达式,不是语句。Hi@metal它不起作用,结果给出了其他彩色球的总和。更新后,我认为您只需要计算球数='red'