mysql - 按类似 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 查询数据
解决方案
将表达式移动到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);
推荐阅读
- windows - 将目录中的所有.jpg图像转换为.pdf | 调试 ImageMagick
- python - MongoDB - 如何在单个操作中更新单个文档的多个数组?可能吗?
- arrays - 创建动态数组作为结构与动态 int 数组的一部分
- omnet++ - 如何获取目标节点的位置?
- javascript - 如何根据时间选择器的大小缩放时间字体大小?
- cobol - 如何修复重复?
- git - git:Eclipse 中的多个主 HEAD 线程
- java - zipkin 添加到 Spring Boot 应用程序导致无法启动应用程序
- c# - 如何将git控制的文本版本存储在数据库中?
- python - 重命名文件夹中的文件 - Python