mysql - Mysql 简化查询以保持没有子查询
问题描述
在我的数据库中,我存储了错误:
+----+---------------------+----------+-------------------+
| id | date | message | name |
+----+---------------------+----------+-------------------+
| 2 | 2018-07-17 11:01:52 | message2 | TypeError |
| 1 | 2018-07-14 11:01:52 | message | HttpErrorResponse |
| 3 | 2018-07-19 11:01:52 | message3 | HttpErrorResponse |
| 4 | 2018-07-19 11:01:52 | message4 | UriError |
+----+---------------------+----------+-------------------+
我想创建另一个包含每日报告的表:
+-------------+-------------+-------------------+
| day | htttpErrors | TypeErrors |OtherErrors:
+---------------------+----------+--------------+
| 2018-07-17 | 1 | 3 | 0
| 2018-07-18 | 2 | 0 | 5
如何以最好的方式做到这一点?当然我可以这样做:
SELECT
current_date(),
(select count(*) from error where day=current_date() and name=TypeErrors)
.........
FROM error
但有更清洁的方法吗?
PS。对不起,我不知道如何正确命名它。
解决方案
您可以拥有如下所示的 SQL。
select date(`date`) as day,
sum(case when upper(name) like '%HTTP%' then 1 else 0 end) http_errors,
sum(case when upper(name) like '%TYPE%' then 1 else 0 end) type_errors,
sum(case when upper(name) not like '%HTTP%' and upper(name) not like '%TYPE%' then 1 else 0 end) other_errors,
from error group by date(`date`);
推荐阅读
- flutter - 如何从 Flutter 桌面应用程序中打开 CMD
- mysql - 在保持 ID 顺序的同时对子类别进行排名
- laravel - laravel中如何在同一位置传递不同的动态参数来访问不同的视图页面
- objective-c - NSDatePicker setDate 没有按预期工作
- typescript - Typescript 在 2020+ 年使用 typeguards 在运行时按类型或接口检查对象
- c - I2C ACKEN 位不会被硬件清除
- php - 如何使用 DB::Tranactions 将数据插入单个控制器中的两个表
- python - python 正则表达式:一个或两个带分隔符
- javascript - 如何使用 javascript 显示表单?
- python - 如何使用鼠标在 python 中绘制 28*28 像素的数字,然后提取像素信息并将其存储到行向量或 28*28 矩阵中?