如何重新组合和计算列中的元素
How to regroup and count elements within a column
我有超市组织的任务数据:
- task_id - 每个单独的任务都有一个唯一的 ID
- store_id - 每家商店都有一个唯一编号来标识它
- week_start - 分配任务的一周开始时间
- 类别 - 任务类型(番茄酱、芥末酱、热狗、培根……)
- busy - 一个 true/false 变量,用于预测该周是否忙碌
- manager - 商店经理姓名
目前数据是按task_id(单个任务)组织的我想按商店和周组织它,然后计算每周在一个类别中分配的任务数量。
此外,类别列目前过于细化,这意味着我想将热狗、培根、火鸡等归为肉,将番茄酱、芥末、蛋黄酱归为酱汁。
我本质上是在尝试反映数据透视表 table 中的结果,其中 store_id、week_start、忙碌和经理是行,类别是列,然后将类别作为中间的数据求和。但在这种情况下,类别使用索引(匹配函数。
我试过运行类似于
的东西
''''SQL
SELECT store_id, week_start, busy, mananger
COUNT(CASE WHEN category = 'hotdog' or 'bacon' or 'turkey') AS MEAT,
COUNT(CASE WHEN category = 'ketchup' or 'mustard') AS Sauce
FROM table1
GROUP BY store_id, week_start;
但我收到的错误是:
AnalysisException:第 2:undefined 行的语法错误:'ketchup' AS Sauce)
^ 遇到:如预期:AND、BETWEEN、DIV、ILIKE、IN、IREGEXP、IS、LIKE、NOT、OR、REGEXP、RLIKE、THEN CAUSED BY:异常:语法错误
如果你想计算值,那么我更喜欢 sum()
而不是 count()
。无论哪种方式,您都需要一个格式正确的 case
表达式:
SELECT store_id, week_start, mananger,
SUM(CASE WHEN category IN ('hotdog','bacon', 'turkey') THEN 1 ELSE 0 END) AS MEAT,
SUM(CASE WHEN category IN ('ketchup', 'mustard') THEN 1 ELSE 0 END) AS Sauce
FROM table1
GROUP BY store_id, week_start;
我还从 SELECT
列表中删除了 busy
。 SELECT
中的未聚合列应与 GROUP BY
.
中的列兼容
我有超市组织的任务数据:
- task_id - 每个单独的任务都有一个唯一的 ID
- store_id - 每家商店都有一个唯一编号来标识它
- week_start - 分配任务的一周开始时间
- 类别 - 任务类型(番茄酱、芥末酱、热狗、培根……)
- busy - 一个 true/false 变量,用于预测该周是否忙碌
- manager - 商店经理姓名
目前数据是按task_id(单个任务)组织的我想按商店和周组织它,然后计算每周在一个类别中分配的任务数量。
此外,类别列目前过于细化,这意味着我想将热狗、培根、火鸡等归为肉,将番茄酱、芥末、蛋黄酱归为酱汁。
我本质上是在尝试反映数据透视表 table 中的结果,其中 store_id、week_start、忙碌和经理是行,类别是列,然后将类别作为中间的数据求和。但在这种情况下,类别使用索引(匹配函数。
我试过运行类似于
的东西''''SQL
SELECT store_id, week_start, busy, mananger
COUNT(CASE WHEN category = 'hotdog' or 'bacon' or 'turkey') AS MEAT,
COUNT(CASE WHEN category = 'ketchup' or 'mustard') AS Sauce
FROM table1
GROUP BY store_id, week_start;
但我收到的错误是:
AnalysisException:第 2:undefined 行的语法错误:'ketchup' AS Sauce) ^ 遇到:如预期:AND、BETWEEN、DIV、ILIKE、IN、IREGEXP、IS、LIKE、NOT、OR、REGEXP、RLIKE、THEN CAUSED BY:异常:语法错误
如果你想计算值,那么我更喜欢 sum()
而不是 count()
。无论哪种方式,您都需要一个格式正确的 case
表达式:
SELECT store_id, week_start, mananger,
SUM(CASE WHEN category IN ('hotdog','bacon', 'turkey') THEN 1 ELSE 0 END) AS MEAT,
SUM(CASE WHEN category IN ('ketchup', 'mustard') THEN 1 ELSE 0 END) AS Sauce
FROM table1
GROUP BY store_id, week_start;
我还从 SELECT
列表中删除了 busy
。 SELECT
中的未聚合列应与 GROUP BY
.