我有一个表如下: log (log_id, log_success (bool), log_created)
我想选择并返回 3 列date
success
and 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] 删除。
我来说两句