【发布时间】:2015-01-09 10:53:41
【问题描述】:
我有一个mysql语句如下
SELECT CASE
WHEN HOUR(created_at) BETWEEN 0 AND 11 THEN 'Morning'
WHEN HOUR(created_at) BETWEEN 12 AND 15 THEN 'Afternoon'
WHEN HOUR(created_at) BETWEEN 16 AND 18 THEN 'Evening'
WHEN HOUR(created_at) BETWEEN 19 AND 24 THEN 'Night'
END AS session,
SUM(total) AS `total` FROM `orders` WHERE (purchase_date between '2014-05-01' and '2014-05-30')
GROUP BY CASE
WHEN HOUR(created_at) BETWEEN 0 AND 11 THEN 1
WHEN HOUR(created_at) BETWEEN 12 AND 16 THEN 2
WHEN HOUR(created_at) BETWEEN 17 AND 18 THEN 3
WHEN HOUR(created_at) BETWEEN 19 AND 24 THEN 4
END;
我得到这样的输出
+------------+------------+
| session | total |
+------------+------------+
| Morning | 47083.21 |
| Afternoon | 1124804.51 |
| Evening | 165643.34 |
| Night | 1690492.01 |
+------------+------------+
但是当早上没有条目时,输出会在结果中缺少 Morning 行,但我想要一个包含早晨但总计为 0 的行。 请帮助我如何实现同样的目标
Expected output
+------------+------------+
| session | total |
+------------+------------+
| Morning | 0 |
| Afternoon | 14804.51 |
| Evening | 16643.34 |
| Night | 19492.01 |
+------------+------------+
实际输出没有晨排
Actual output
+------------+------------+
| session | total |
+------------+------------+
| Afternoon | 1124804.51 |
| Evening | 165643.34 |
| Night | 1690492.01 |
+------------+------------+
如果能提供任何帮助或提示来解决此问题,我将不胜感激
【问题讨论】:
-
您只需要来自该查询本身吗?
-
不一定是同一个查询,但如果有其他替代查询也可以
-
我不想使用带有该查询的备用查询,我只想使用带有条件的 o/p...如果 total=0 跳过该记录可以吗?
-
如果总计为零,则应反映该结果
标签: mysql sql ruby-on-rails case