Группировка MySQL-запроса по SUM (порог) - PullRequest
0 голосов
/ 30 декабря 2018

Я настраиваю запрос 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-03 - это первая дата, когда было превышено 1000.

«Вехи» не будут находиться на одинаковом расстоянии друг от друга в каждом случае.Так что в идеале я ищу запрос, который мог бы объединить SUM с IF и GROUP, возможно?

Я гуглял часами, но не мог понять, как это сделать, кроме как просматривать все результаты по отдельностии подсчет суммарных значений + операторов if, который потребляет ресурсы.Если это вообще возможно, я бы хотел сохранить это в запросе.

Спасибо за ваше время!

1 Ответ

0 голосов
/ 30 декабря 2018

Например:

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     |
+---------------+----------------+----------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...