Mysql SQL在一个查询中进行多个求和

Mysql SQL在一个查询中进行多个求和,mysql,sql,mariadb,Mysql,Sql,Mariadb,我正在尝试学习SQL,想知道如何为多个日期编写此查询。我尝试使用CASE,但它没有输出正确的总数。这个查询有效 我正试图计算每个预订的每日总销售额,这是每日销售额的有效值 SELECT SUM(dailyrate) AS 1June FROM reservations WHERE start_date < '2018-06-02' AND end_date > '2018-06-01'; 这是我尝试使用的案例,但它没有产生正确的总数 select dailyrate,

我正在尝试学习SQL,想知道如何为多个日期编写此查询。我尝试使用CASE,但它没有输出正确的总数。这个查询有效

我正试图计算每个预订的每日总销售额,这是每日销售额的有效值

SELECT SUM(dailyrate) AS 1June
FROM reservations
    WHERE start_date < '2018-06-02' AND end_date > '2018-06-01';
这是我尝试使用的案例,但它没有产生正确的总数

select dailyrate, 
    sum(case when start_date < '2018-06-02' AND end_date > '2018-06-01' then 1 else 0 end) as 1june,
    sum(case when start_date < '2018-06-03' AND end_date > '2018-06-02' then 1 else 0 end) as 2june,
    sum(case when start_date < '2018-06-04' AND end_date > '2018-06-03' then 1 else 0 end) as 3june
FROM reservations;

+------------------+------------------+----------+-
|   start_date     |    end_date      | dailyrate |
+------------------+------------------+----------+--
| 2018-06-01 05:00 | 2018-06-01 15:00 | 22       |  
| 2018-05-21 05:00 | 2018-06-04 19:00 | 11.5     |  
| 2018-06-01 15:00 | 2018-06-07 05:00 | 24       |  
| 2018-06-03 05:00 | 2018-06-02 22:00 | 9.5      | 
| 2018-05-21 12:00 | 2018-06-11 05:00 | 31       |  
+------------------+------------------+----------+-

您是否正在查找每天的每日费用计数? 如果是,这可能是您要查询的查询:

SELECT dailyrate, 
COUNT(CASE WHEN start_date < '2018-06-02' AND end_date > '2018-06-01' THEN 1 ELSE 0 end) AS 1june,
COUNT(CASE WHEN start_date < '2018-06-03' AND end_date > '2018-06-02' THEN 1 ELSE 0 end) AS 2june,
COUNT(CASE WHEN start_date < '2018-06-04' AND end_date > '2018-06-03' THEN 1 ELSE 0 end) AS 3june
FROM reservations
GROUP BY dailyrate;
如果要查找每个表的每日费率总和,则此查询可能适用于您:

SELECT dailyrate, 
SUM(CASE WHEN start_date < '2018-06-02' AND end_date > '2018-06-01' THEN dailyrate ELSE 0 end) AS 1june,
SUM(CASE WHEN start_date < '2018-06-03' AND end_date > '2018-06-02' THEN dailyrate ELSE 0 end) AS 2june,
SUM(CASE WHEN start_date < '2018-06-04' AND end_date > '2018-06-03' THEN dailyrate ELSE 0 end) AS 3june
SUM reservations
GROUP BY dailyrate;

我认为您缺少GROUP BY,因为SUM和COUNT函数都是聚合函数,需要GROUP BY来显示正确的数据。

您能给我们展示一个表保留的示例吗?你需要每天的费用总额吗?是的,我会发布一个表格样本。你想归档什么?你期望得到什么?我正在试图计算每个预订的每日总预订量。很抱歉,但还不清楚你期望的输出量是多少。你能在帖子中描述一下吗?我想像start_date<'2018-06-02'和end_date>'2018-06-01'这样的谓词不会选择6月1日的利率,除非我不理解这个查询的基本原理。是的,我也是这么想的,但最初的帖子说他的第一个查询是有效的,并且使用了相同的逻辑。但我们可以等他发布样本数据。坦斯克bbrumm这是有效的。我基本上只需要按照您在第二个代码示例中的建议将1更改为DailrRate。@bbrumm-计数版本不起作用-COUNT0计数。将0更改为NULL或更改为SUM。@bbrumm-表示计数的较短方式是SUMstart_date<'2018-06-02'和end_date>'2018-06-01'-因为布尔值被视为1表示真或0表示假。