我正在建立一个MySQL查询,该查询对数据库中的值求和并按阈值对它们进行分组,因此它仅在达到某些值时才输出“里程碑”。
数据库如下:
date - number
2018-12-01 - 500
2018-12-02 - 400
2018-12-03 - 300
2018-12-04 - 500
2018-12-05 - 400
etc.
预期输出:
Milestone 500 = 2018-12-01
Milestone 1000 = 2018-12-03
Milestone 2000 = 2018-12-05
etc.
编辑:里程碑应显示超过某个里程碑的第一个日期。因此,2018年12月3日是第一个超过1000的日期。
“里程碑”在每种情况下都不会彼此相同。因此,理想情况下,我正在寻找一个可以将SUM与IF和GROUP相结合的查询?
我已经使用Google搜索了几个小时,但是我茫然地知道如何做到这一点,除了单独遍历所有结果并计算总值+ if语句外,这很浪费资源。如果可能的话,我希望将其保留在查询中。
谢谢您的时间!
答案 0 :(得分:0)
例如:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(date DATE NOT NULL PRIMARY KEY
,number INT NOT NULL
);
INSERT INTO my_table VALUES
('2018-12-01',500),
('2018-12-02',400),
('2018-12-03',300),
('2018-12-04',500),
('2018-12-05',400);
SELECT MIN(CASE WHEN total >= 500 THEN date END) milestone_500
, MIN(CASE WHEN total >= 1000 THEN date END) milestone_1000
, MIN(CASE WHEN total >= 2000 THEN date END) milestone_2000
FROM
(
SELECT x.*,SUM(y.number) total FROM my_table x JOIN my_table y ON y.date <= x.date GROUP BY x.date
) a;
+---------------+----------------+----------------+
| milestone_500 | milestone_1000 | milestone_2000 |
+---------------+----------------+----------------+
| 2018-12-01 | 2018-12-03 | 2018-12-05 |
+---------------+----------------+----------------+