[英]SQL multiple sums in one query
I am trying to learn SQL and am wondering how to write this query for multiple dates. 我正在尝试学习SQL,并且想知道如何针对多个日期编写此查询。 I tried using CASE but it is not outputting the correct totals.
我尝试使用CASE,但未输出正确的总数。 This query works.
该查询有效。
I am trying to total the dailyrate for each reservation which is the effectively the daily sales. 我试图将每个预订的日费率合计,即实际上是每天的销售额。
SELECT SUM(dailyrate) AS 1June
FROM reservations
WHERE start_date < '2018-06-02' AND end_date > '2018-06-01';
This was my attempt using CASE but it does not produce the correct totals. 这是我使用CASE进行的尝试,但无法得出正确的总数。
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 |
+------------------+------------------+----------+-
Are you looking for the COUNT of each daily_rate on each day? 您是否正在寻找每天每一日的COUNT个? If so, this may be the query you're after:
如果是这样,这可能是您要执行的查询:
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;
If you're looking for the SUM of the daily rates for each table, then this query may work for you: 如果您要查找每个表的每日费率的总和,那么此查询可能对您有用:
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;
I think you were missing the GROUP BY, as both the SUM and COUNT functions are aggregate functions and need a GROUP BY to show the correct data. 我认为您错过了GROUP BY,因为SUM和COUNT函数都是聚合函数,需要GROUP BY才能显示正确的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.