Я написал ниже запрос, который работает, но он невероятно неэффективен и медленный. Что я могу сделать, чтобы сделать его более эффективным? Я понимаю, что это в основном «зацикливание» над каждым идентификатором в системе, их около 500, и для каждого из них выполняется 13 выборочных операторов - я просто не знаю лучшего способа получить эту информацию.MySQL возвращает месяц за месяцем для каждого отдельного идентификатора
Мое поле даты - DATE
Поле хранится как YYYY-MM-DD
.
SELECT
id as name,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-01-01' AND '2017-01-31') and id = name) as January,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-02-01' AND '2017-02-31') and id = name) as February,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-03-01' AND '2017-03-31') and id = name) as March,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-04-01' AND '2017-04-31') and id = name) as April,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-05-01' AND '2017-05-31') and id = name) as May,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-06-01' AND '2017-06-31') and id = name) as June,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-07-01' AND '2017-07-31') and id = name) as July,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-08-01' AND '2017-08-31') and id = name) as August,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-09-01' AND '2017-09-31') and id = name) as September,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-10-01' AND '2017-10-31') and id = name) as October,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-11-01' AND '2017-11-31') and id = name) as November,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-12-01' AND '2017-12-31') and id = name) as December,
(SELECT sum(captured_profit) from me where (date BETWEEN '2017-11-01' AND '2017-12-31') and id = name) as Total,
from me
where id is not null
group by id;
это означает, что я печатал быстро и сделал '11' вместо' 01'. Спасибо :) Позвольте мне попробовать это и сообщить вам, спасибо вам большое! Edit: Booya, это ТОЧНО, что мне нужно. Я буду читать заявления CASE! –
Хорошо, тогда Total может быть просто 'SUM (capture_profit)' в моем примере, так как я использовал условие WHERE для ограничения диапазона до 2017. –