首页 > 解决方案 > 其中“a”列中每个组的“c”列不为空 - 给“a”组赋值 1

问题描述

“C”列是标志指示器。我想运行一个查询,我可以对不为空的列“c”求和。我希望每组 A 列有 1 个值。

例如组“测试”,总共有 1。组机会总共有 1。组“播放”总共有 0。

结果,我想要一个总数。请在下面查看我的代码。

一个 C
测试 苹果
测试
测试
测试 苹果
机会
机会 苹果
机会
SELECT
sum(case when distinct A and C is not null then 1 else 0 end) as total
FROM table

标签: sqlamazon-web-servicesamazon-redshift

解决方案


如果你想要一个标志 per aif anyc有一个值,那么你可以使用:

select a, (case when count(c) > 0 then 1 else 0 end) as has_c
from t
group by a;

您实际上可以使用以下sign()函数来简化它:

select a, sign(count(c)) as has_c
from t
group by a;

如果你想要每行这个,那么使用窗口函数:

select t.*,
       (case when count(c) over (partition by a) > 0 then 1 else 0 end)
from t;

显然,如果您只想计算非NULL值,您将使用count(c)不带case表达式的内容。


推荐阅读