在 Case 语句中使用 Count 条件对变量进行分类
Using a Count condition in a Case statement to classify a variable
我正在尝试计算某个值在按 ID 分组的一列中出现的次数。这是一个示例数据集:
ID Yes_or_No
1 Yes
1 No
2 Yes
3 Yes
4 Yes
4 No
5 Yes
一般的想法是,如果我为某个 ID 计算不同的值,如果计数大于 1,那么我可以创建一个新列并调用它 'Maybe',例如当某个 ID 同时具有两个值时'Yes' 和 'No' 值。这是我最初写的,但不起作用:
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 语句中使用子查询,以节省内存。欢迎使用其他解决方法。
您需要将 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)
你的 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
语句的一部分,用于定义 column alise 或 table艾莉丝
我正在尝试计算某个值在按 ID 分组的一列中出现的次数。这是一个示例数据集:
ID Yes_or_No
1 Yes
1 No
2 Yes
3 Yes
4 Yes
4 No
5 Yes
一般的想法是,如果我为某个 ID 计算不同的值,如果计数大于 1,那么我可以创建一个新列并调用它 'Maybe',例如当某个 ID 同时具有两个值时'Yes' 和 'No' 值。这是我最初写的,但不起作用:
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 语句中使用子查询,以节省内存。欢迎使用其他解决方法。
您需要将 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)
你的 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
语句的一部分,用于定义 column alise 或 table艾莉丝