MySQL 返回求和值和一个虚拟列作为 (count - sum)

集群好友

我有一个表如下: log (log_id, log_success (bool), log_created)

我想选择并返回 3 列date successand 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.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章