条件 CASE WHEN select 雪花 SQL

Conditional CASE WHEN select snowflake SQL

我卡在条件雪花select sql 上了。当 ID 具有相应的分类值时,我正在尝试对其进行计数。我会很感激一些帮助。

谢谢

SELECT 
YEAR(DATETIME) AS YEAR, 
WEEKOVERYEAR(DATETIME) AS WEEK,
COUNT(CASE WHEN ID THEN CATEGORY = 'A')
from table 
group by week, year;

这是一种方法:

SELECT YEAR(DATETIME) AS YEAR, 
       WEEKOVERYEAR(DATETIME) AS WEEK,
       SUM(CASE WHEN CATEGORY = 'A' THEN 1 ELSE 0 END) as num_a
FROM table 
GROUP BY week, year;

COUNT() 计算不为空的行数。 如果你想要当 ID 不为 null AND CATEGORY = 'A' then

COUNT(CASE WHEN ID IS NOT NULL AND CATEGORY = 'A' THEN TRUE ELSE NULL END)

会给你那个,或者你可以像 Gordon 的回答那样使用 SUM

SUM(CASE WHEN ID IS NOT NULL AND CATEGORY = 'A' THEN 1 ELSE 0 END)

或者您可以使用雪花 IFF 作为同一事物的更短形式,我就是这样做的

SUM( IFF( ID IS NOT NULL AND CATEGORY = 'A', 1, 0))

雪花支持COUNT_IF:

Returns the number of records that satisfy a condition.

Aggregate function

COUNT_IF( <condition> )
SELECT YEAR(DATETIME) AS YEAR, 
       WEEKOVERYEAR(DATETIME) AS WEEK,
       COUNT_IF(CATEGORY = 'A') AS num_a
FROM tab
GROUP BY week, year;

您应该/可以使用 IFF(),因为当存在多个条件时 case when 更合适。

SELECT 
    YEAR(DATETIME) AS YEAR, 
    WEEKOVERYEAR(DATETIME) AS WEEK,
    COUNT(IFF(CATEGORY = 'A',ID,NULL)) as count
    from table 
    group by week, year;