MySQL медиана с 2 группами по - PullRequest
0 голосов
/ 08 мая 2020

У меня есть следующая таблица

Date       | year        | quarter  |  val1   | val2        | 
-----------|-------------|----------|---------|-------------|
2020-01-01 | 2020        | Q1       | 10      | 80          | 
2020-01-01 | 2020        | Q1       | 20      | 20          |
2020-01-02 | 2020        | Q1       | 10      | 70          |
2020-01-03 | 2020        | Q1       | 30      | 40          |
2020-03-02 | 2020        | Q2       | 40      | 80          |
2020-03-02 | 2020        | Q2       | 20      | 20          |
...

я пытаюсь получить медианную группу по годам и кварталам, которая также включает сумму val1 и val2

year        | quarter  |sum(val1)   | sum(val2)   | median (val2)  |
------------|----------|------------|-------------|----------------|
2020        | Q1       | 70         | 210         | 55             |
2020        | Q2       | 60         | 100         | 50             |
...

I попробовал следующее, и это дало мне общую медиану для val2

SELECT AVG(dd.`val2`) as median_val2
FROM (
SELECT d.`val2`, @rownum:=@rownum+1 as `row_number`, @total_rows:=@rownum
  FROM `mytable` d, (SELECT @rownum:=0) r
  WHERE d.`val2` is NOT NULL
  ORDER BY d.`val2`
) as dd
WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );

___

 median_val2    |
 ---------------|
 55             |

Я понимаю, что мне нужно добавить где-то группу, но я не знаю, где.

...