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

MySQL将求和值和虚拟列返回为(count-sum),mysql,Mysql,我的表格如下: log(log\u id,log\u success(bool),log\u created) 我想选择并返回3列datesuccess和no\u success,其中前者在表中不存在,并最终按天进行聚合 我已创建此查询: SELECT log_created as 'date' COUNT(*) AS 'count', SUM(log_success) AS 'success' SUM('count' - 'success') AS 'no_success' FROM send

我的表格如下:
log(log\u id,log\u success(bool),log\u created)

我想选择并返回3列
date
success
no\u 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\u FORMAT
DATE\u FORMAT
通常是一个表示层函数,您之所以调用它,是因为您希望查看以某种方式格式化的日期。由于创建的
log\u
似乎已经是一个日期,因此在聚合时无需对其调用
date\u FORMAT
。您甚至不应该在select子句中使用,因为MySQL日期的默认格式已经是
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\u FORMAT
DATE\u FORMAT
通常是一个表示层函数,您之所以调用它,是因为您希望查看以某种方式格式化的日期。由于创建的
log\u
似乎已经是一个日期,因此在聚合时无需对其调用
date\u FORMAT
。您甚至不应该在select子句中使用,因为MySQL日期的默认格式已经是
Y-m-d

如果您想按此进行分组,您必须选择
date\u格式(log\u created,'%Y-%m-%d')

您还可以使用
SUM(abs(log\u success-1))


请参见

如果要按此进行分组,则必须选择日期格式(日志创建,'%Y-%m-%d')
您还可以使用
SUM(abs(log\u success-1))


请参阅

“我可以通过此查询实现它吗?我的语法正确吗?”不能在相同的选择级别上重复使用任何选择别名。您需要将
SUM('count'-'success')替换为'No_success'
SUM(count(*)-SUM(log_success))替换为'No_success'
“我能通过这个查询实现它吗?我的语法正确吗?“无选择别名不能在相同的选择级别上重复使用。您需要将
SUM('count'-'success')替换为'No_success'
,将
SUM(count(*)-SUM(log_success))替换为'No_success'
非常好,现在重新设置
count(*)作为count
,我基本上不需要它,因为我没有使用别名,对吗?你的问题是,我试图按天聚合结果,所以我想我需要规定日期格式,请在上面的plz上更正我,thx!如果你不需要它,请从查询中删除
count
。当你在MySQL中按日期聚合时,你就是aggr按天计算。这就是日期。很好,现在重新计算(*)作为count,我基本上不需要它,因为我没有使用别名,对吗?你的问题是,我试图按天聚合结果,所以我想我需要规定日期格式,请在上面的plz上更正我,thx!如果你不需要它,请从查询中删除
count
。当你在MySQL中按日期聚合时,你就是aggr白天约会。这就是约会。