对于列 "a" 中的每个组,列 "c" 不为空 - 给组 "a" 一个值 1

Where column "c" is not null for each group in column "a" - give group "a" a value of 1

“C”列是标志指示符。我想 运行 一个查询,我可以在其中对不为空的列“c”求和。我想要每组 A 列的 1 个值。

例如“测试”组,共有 1 个。“机会”组共有 1 个。“游戏”组共有 0 个。

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

A C
Test apple
Test orange
Test
Test apple
Chance
Chance apple
Chance
Play
Play
SELECT
sum(case when distinct A and C is not null then 1 else 0 end) as total
FROM table

如果你只想要 1 个,试试这个:

SELECT DISTINCT
    a,
    1 exsts
FROM
    aux
WHERE
    c IS NOT NULL

如果您想要实际的出现次数,请使用:

SELECT
    a,
    SUM(
        CASE
            WHEN c IS NOT NULL THEN
                1
        END
    ) s
FROM
    aux
GROUP BY
    a

如果你想要每个 a 的标志,如果任何 c 有一个值,那么你可以使用:

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;

如果您希望每行 ,则使用 window 函数:

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

显然,如果您只想计算非 NULL 值,您可以只使用 count(c) 而没有 case 表达式。