накопительная функция в запросе не группируется по - PullRequest
0 голосов
/ 14 мая 2019

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

Я пытался добавить группу по порядку до последнего порядка в коде, это не сработало.

SELECT t.insurance_status, t.day, t.vendor_count,
       @running_total:=@running_total + t.vendor_count AS cumulative_sum
FROM (SELECT insurance_status,
             DATE_FORMAT(date, '%Y %m') as day,
             count(insurance_status) as vendor_count
      FROM vendor_report_jll
      WHERE project_id in (100, 92, 45, 91, 86, 87, 88, 40, 101, 90, 98)
      GROUP BY insurance_status,day
     ) t JOIN
     (SELECT @running_total := 0) AS t2
ORDER BY  t.insurance_status;

enter image description here

1 Ответ

0 голосов
/ 14 мая 2019

Вам нужна другая переменная, чтобы запомнить страховой статус:

SELECT t.insurance_status, t.day, t.vendor_count,
       (@sum := if(@is = t.insurance_status, @sum + t.vendor_count,
                   if(@is := t.insurance_status, t.vendor_count, t.vendor_count
                     )
                  )
       ) AS cumulative_sum
FROM (SELECT insurance_status,
             DATE_FORMAT(date, '%Y %m') as day,
             count(insurance_status) as vendor_count
      FROM vendor_report_jll
      WHERE project_id in (100, 92, 45, 91, 86, 87, 88, 40, 101, 90, 98)
      GROUP BY insurance_status, day
      ORDER BY insurance_status, day  -- just being explicit
     ) t CROSS JOIN
     (SELECT @sum := 0, @is := -1) params;

Вы должны выполнить все задания в одном выражении. Это связано с правилами MySQL - он не гарантирует порядок вычисления выражений в SELECT, поэтому вы не можете назначать переменные в одном выражении и использовать их в другом.

...