MySQL 将求和值和虚拟列返回为 (count - sum)

标签 mysql

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

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

我不知道您为什么在查询的group by子句中调用DATE_FORMATDATE_FORMAT 通常是一个表示层函数,您调用它是因为您想要查看以某种方式格式化的日期。由于 log_created 似乎已经是一个日期,因此聚合时无需对其调用 DATE_FORMAT。您甚至不需要在 select 子句中使用,因为 MySQL 日期的默认格式已经是 Y-m-d

关于MySQL 将求和值和虚拟列返回为 (count - sum),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55089288/

相关文章:

mysql - 如何统计一个表每天有多少个人用户?

mysql - 使用 concat 从存储过程的表中删除

java - Mysql插入查询不适用于插入

android - 由于未在 SharedPrefManager 类中初始化类的实例而出现错误。无法解决

MySQL RegEx匹配两个相同的连续数字

mysql - mysql中json数组内的求和字段

PHP MySQLi 从索引处的表中选择行

php - 为什么我拉不到这个字段? php/mysql

mysql - 为什么 MYD 文件的大小这么大?

mysql - 如何将一行的初始状态与 MySQL 中的最新状态结合起来?