对于列 "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
表达式。
“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
表达式。