首页 > 解决方案 > 使用两个不同的日期条件计算列中的所有行

问题描述

我正在尝试将两个具有日期条件的计数查询(如下)转换为一个查询。

SELECT COUNT(*) as yesterday FROM orders WHERE DATE(timedate) = DATE(NOW() - INTERVAL 1 DAY)
SELECT COUNT(*) as yesterday FROM orders WHERE DATE(timedate) = DATE(NOW() - INTERVAL 2 DAY)

按照另一个答案的建议,我创建了以下内容,但这似乎在语法上不起作用,我不太清楚为什么。还有另一种方法可以做到这一点吗?我找不到类似的问题

SELECT 
    SUM(IF(DATE(timedate) = DATE(NOW() - INTERVAL 1 DAY))) AS testcount1,
    SUM(IF(DATE(timedate) = DATE(NOW() - INTERVAL 2 DAY))) AS testcount2
FROM 
    orders

标签: mysqlsqldategroup-bymariadb

解决方案


您缺少IF表达式的输出值。你也应该使用CURRENT_DATE(),所以你不需要转换为DATE

SELECT 
    SUM(IF(DATE(timedate) = CURRENT_DATE() - INTERVAL 1 DAY, 1, 0)) AS testcount1,
    SUM(IF(DATE(timedate) = CURRENT_DATE() - INTERVAL 2 DAY, 1, 0)) AS testcount2
FROM 
    orders

请注意,MySQL 在数字上下文中将布尔表达式视为1( true) 或0( false),因此您实际上可以SUM在不需要 的情况下使用IF

SELECT 
    SUM(DATE(timedate) = CURRENT_DATE() - INTERVAL 1 DAY) AS testcount1,
    SUM(DATE(timedate) = CURRENT_DATE() - INTERVAL 2 DAY) AS testcount2
FROM 
    orders

推荐阅读