mysql - 一次查询中的 SQL 多个总和
问题描述
我正在尝试学习 SQL,并且想知道如何为多个日期编写此查询。我尝试使用 CASE 但它没有输出正确的总数。此查询有效。
我正在尝试汇总每个预订的每日费用,这实际上是每日销售额。
SELECT SUM(dailyrate) AS 1June
FROM reservations
WHERE start_date < '2018-06-02' AND end_date > '2018-06-01';
这是我使用 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 |
+------------------+------------------+----------+-
解决方案
您是否每天都在寻找每个 daily_rate 的 COUNT ?如果是这样,这可能是您所追求的查询:
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 来显示正确的数据。
推荐阅读
- c++ - 如何解决 C++ 中的运算符问题?
- javascript - 如何对值进行排序并仅返回高于某个值的项目?
- javascript - 如何使用 Flask 将 Canvas url 转换为图像 numpy 数组?
- spring-integration - Spring集成Java DSL:如何使用Http.outboundGateway方法动态选择HttpMethod
- ios - 即使我设置了 TableView.separatorStyle = .none,UITableViewCell 之间的细线间隙也是可见的
- php - 修复我的 breadcrumbs.php 文件 - 它忽略了部分 URL
- java - String s = new String(s.getBytes("UTF-8"),"UTF-8"); 有什么区别?和字符串 s = new String(s.getBytes(),"UTF-8");
- r - 打印数据集摘要的内存有效方法
- javascript - 如何从谷歌搜索发送随机图像?
- mysql - MYSQL 触发器抛出显式或隐式提交是不允许的