我掌握了超市组织的任务数据,
目前,数据是按task_id(单个任务)进行组织的,我希望按store&week对数据进行组织,然后计算每周在类别中分配的任务数量。
此外,类别列目前过于细化,这意味着我想将热狗,培根,火鸡等归类为肉,将番茄酱,芥末,蛋黄酱归类为酱汁。
我实质上是想镜像数据透视表中的结果,其中store_id,week_start,busy和&manager为行,类别为列,然后将类别总和作为中间的数据。但是在这种情况下,使用index(match function。
我尝试运行类似于
的内容''''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行中的语法错误:未定义:“ ketchup” AS Sauce) ^遇到:如所预期:并且,在之间,DIV,ILIKE,IN,IREGEXP,是,喜欢,不,或者,REGEXP,RLIKE,然后原因:例外:语法错误
答案 0 :(得分:0)
如果您要计算值,那么我更喜欢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;
我还从busy
列表中删除了SELECT
。 SELECT
中未聚合的列应与GROUP BY
中的列兼容。