在Case语句中使用Count条件对变量

时间:2018-05-01 15:07:38

标签: sql count case vertica

我试图计算一列中出现的值的次数,按ID分组。以下是一个示例数据集:

ID      Yes_or_No
1       Yes
1       No
2       Yes
3       Yes
4       Yes
4       No
5       Yes

一般的想法是,如果我计算某些ID的不同值,如果计数大于1,那么我可以创建一个新列,当某些ID同时采用'是'时,它会调用它'Maybe' '不'的价值观。这是我最初写的,但不起作用:

SELECT  ID,
        CASE WHEN COUNT(DISTINCT Yes_or_No)>1 AS 'Maybe'
        ELSE Yes_or_No
        END AS YesNoMaybe
FROM db
GROUP BY 1;

这是更大的整体查询的一部分,因此,理想情况下,我希望能够在Case语句中使用Count而不是FROM语句中的子查询以节省内存。其他的解决方法是受欢迎的。

2 个答案:

答案 0 :(得分:3)

您需要将AS更改为THEN

SELECT  ID,
        CASE WHEN COUNT(DISTINCT Yes_or_No)>1 THEN 'Maybe'
        ELSE MIN(Yes_or_No)    --here agg function is required
        END AS YesNoMaybe
FROM db
GROUP BY ID;   --GROUP BY 1 is antipattern (explicit name >> position)

<强> DBFiddle Demo

答案 1 :(得分:1)

您的case表达式应该为

SELECT  ID,
        (CASE WHEN COUNT(DISTINCT Yes_or_No) > 1 
              THEN 'Maybe' ELSE MIN(Yes_or_No)
         END) AS YesNoMaybe
FROM db
GROUP BY ID;

As不属于case表达式,它是select语句的一部分,用于定义 alise或 ALISE

相关问题