按类似SQL查询分组

时间:2018-07-30 20:53:04

标签: mysql sql sql-server group-by case

我有一个包含数据(例如)的表(reason_table):

request_id          created_time            type             detail
asdas232          2018-07-29 00:00:01      NO_VALID        No valid offer for id asdas232
aseeas232         2018-07-29 00:00:02      NO_VALID        Not default offer for id aseeas232

我正在尝试根据详细信息(如上)获取计数:

invalidOffer = 1
NoDefaultOffer = 1

我尝试过:

SELECT detail, count(*)
FROM reason_table 
where "type" like '%NO_VALID%'
and created_time >=  '2018-07-29 00:00:00'
and created_time <=  '2018-07-29 00:00:10'
GROUP BY
    CASE
        WHEN detail LIKE '%invalid%' THEN 'invalidOffer'
        WHEN detail LIKE '%default%' THEN 'NoDefaultOffer'
        ELSE NULL
    END

但在说SQL Error [500310] [42803]: [ Invalid operation: column "detail" must appear in the GROUP BY clause or be used in an aggregate function;

时出错

有人可以帮我在这里找到我做错了什么吗? 我正在使用DBeaver从redshift查询数据

1 个答案:

答案 0 :(得分:4)

将表达式移动到select

SELECT (CASE WHEN detail LIKE '%invalid%' THEN 'invalidOffer'
             WHEN detail LIKE '%default%' THEN 'NoDefaultOffer'
        END) as detail_group,
        count(*)
FROM reason_table 
WHERE "type" like '%NO_VALID%' AND
      created_time >=  '2018-07-29 00:00:00' AND
      created_time <=  '2018-07-29 00:00:10'
GROUP BY (CASE WHEN detail LIKE '%invalid%' THEN 'invalidOffer'
               WHEN detail LIKE '%default%' THEN 'NoDefaultOffer'
          END);