首页 > 解决方案 > 按类似 SQL 查询分组

问题描述

我有一个包含数据(例如)的表(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 查询数据

标签: mysqlsqlsql-servergroup-bycase

解决方案


将表达式移动到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);

推荐阅读