社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

Sascha • 5 年前 • 543 次点击  

我正在设置一个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
 
543 次点击  
文章 [ 1 ]  |  最新文章 5 年前
sticky bit Strawberry
Reply   •   1 楼
sticky bit Strawberry    6 年前

例如。:

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