mysql - MySQL 返回总和值和一个虚拟列作为 (count - sum)
问题描述
我有一张如下表:
log (log_id, log_success (bool), log_created)
我想 SELECT 并返回 3 列date
success
和no_success
,其中前者在表中不存在,最后按天聚合它们。
我创建了这个查询:
SELECT
log_created as 'date'
COUNT(*) AS 'count',
SUM(log_success) AS 'success'
SUM('count' - 'success') AS 'no_success'
FROM send_log
GROUP BY DATE_FORMAT(log_created, '%Y-%m-%d');
我能用这个查询来实现它吗?我的语法正确吗?
谢谢。
解决方案
您不能在同一个 select 子句中重用 select 中定义的别名。原因是当你去访问它时它甚至可能没有被定义。但是,您可以很容易地重复逻辑:
SELECT
log_created AS date,
SUM(log_success) AS success,
COUNT(*) - SUM(log_success) AS no_success,
FROM send_log
GROUP BY
log_created;
我不知道您为什么要DATE_FORMAT
在查询的group by子句中调用。 DATE_FORMAT
通常是一个表示层函数,调用它是因为您想查看以某种方式格式化的日期。由于它看起来已经是一个日期,因此在聚合时log_created
无需调用它。DATE_FORMAT
您甚至不需要在 select 子句中,因为 MySQL 日期的默认格式已经是Y-m-d
.
推荐阅读
- java - 如何根据特定列对文件中的重复条目进行排序和删除
- python - Unicode 上的 Python 2 字符串检查失败
- c++ - C++ 无序对类型
- jenkins - 将 Jenkins 的管理员用户添加到 kubeadm kubernetes 集群
- c# - StorageFolder“访问被拒绝”
- java - 如何在不返回结果集的spring boot中执行strore过程?
- c - 如何在c控制台中将光标移回?
- php - 页面在 Ajax 调用中冻结
- c++11 - 如果设置 protobuf 可序列化类的值,为什么会出现 zmq 错误?
- python - 在 python 中执行准备好的语句 IBM_DB 时出现绑定错误