Py学习  »  DATABASE

按总和对mysql查询进行分组(阈值)

Sascha • 4 年前 • 414 次点击  

我正在设置一个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可能吗?

我已经在谷歌上搜索了几个小时了,但是我不知道该怎么做,除了分别遍历所有结果并计算总值+if语句(这是一种资源消耗)之外。如果可能的话,我想把它保留在查询中。

谢谢你抽出时间!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47042
 
414 次点击  
文章 [ 1 ]  |  最新文章 4 年前
sticky bit Strawberry
Reply   •   1 楼
sticky bit Strawberry    5 年前

例如。:

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     |
+---------------+----------------+----------------+