MySQL Расчеты подзапроса (средние значения лучших 3 за последние 90 дней) - PullRequest
0 голосов
/ 31 марта 2020

У меня есть 2 таблицы следующим образом:

игроков

+---------+---------+
| ID      | name    |
+---------+---------+
| 1299430 | Name 35 |
+---------+---------+
| 758151  | Name 34 |
+---------+---------+
| 1124585 | Name 17 |
+---------+---------+
| 258182  | Name 39 |
+---------+---------+
| 4555    | Name 5  |
+---------+---------+
| 301187  | Name 15 |
+---------+---------+
| 855547  | Name 27 |
+---------+---------+
| 987818  | Name 30 |
+---------+---------+
| 1400632 | Name 37 |
+---------+---------+
| 3614    | Name 4  |
+---------+---------+

результаты :

+---------+----------+---------+---------+---------+--------+---------------+
    | ID      | division | A Score | B Score | C Score | event  | unixtimestamp |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 301187  | 30       | 2.8     | 240     | 85      | 357035 | 1585433400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 301187  | 30       | 2.8     | 244     | 85      | 364785 | 1584396600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 301187  | 30       | 2.9     | 252     | 85      | 356804 | 1584198600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 301187  | 30       | 2.6     | 227     | 85      | 321917 | 1580911800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 301187  | 30       | 2.6     | 227     | 85.2    | 309411 | 1579741800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1124585 | 30       | 2.7     | 294     | 108.9   | 333025 | 1581473100    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1124585 | 30       | 2.7     | 303     | 108.9   | 321969 | 1581185400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1124585 | 30       | 2.7     | 305     | 109.8   | 316073 | 1580785800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1124585 | 30       | 2.9     | 320     | 109.8   | 315578 | 1580267400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1124585 | 30       | 2.4     | 265     | 109.8   | 313461 | 1580037000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1124585 | 30       | 2.8     | 310     | 109.8   | 309398 | 1579659000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1124585 | 30       | 2.7     | 304     | 110.7   | 300719 | 1579057800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 855547  | 20       | 3.1     | 228     | 72      | 356830 | 1584321000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 855547  | 20       | 3.3     | 239     | 72      | 333058 | 1581560100    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 855547  | 20       | 3.1     | 228     | 72      | 333107 | 1581388200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 855547  | 20       | 3.5     | 258     | 72      | 303847 | 1579313400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 855547  | 20       | 3.4     | 245     | 72      | 301701 | 1578967800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 987818  | 20       | 3.8     | 247     | 64.9    | 357028 | 1585404600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 987818  | 20       | 3.6     | 239     | 65.3    | 356972 | 1585091400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 987818  | 20       | 3.6     | 238     | 65      | 356891 | 1584670200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 987818  | 20       | 3.5     | 230     | 65.3    | 303822 | 1579183800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 987818  | 20       | 3.5     | 231     | 65.8    | 300191 | 1578841800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 758151  | 20       | 3.6     | 267     | 73      | 357028 | 1585404600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 758151  | 20       | 3.9     | 289     | 73      | 356958 | 1585005000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 758151  | 20       | 3.7     | 279     | 75      | 356804 | 1584198600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 758151  | 20       | 3.8     | 274     | 71.7    | 321943 | 1581073800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 758151  | 20       | 3.6     | 265     | 71.9    | 315615 | 1580469000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 758151  | 20       | 3.7     | 264     | 71.2    | 309372 | 1579572600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 758151  | 20       | 3.8     | 271     | 71.2    | 303874 | 1579432200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 758151  | 20       | 3.8     | 270     | 71.2    | 301705 | 1579000200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 4.1     | 339     | 82      | 361918 | 1584133200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 3.9     | 333     | 85      | 356755 | 1583950200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 3.6     | 315     | 87.1    | 321920 | 1580929800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 3.7     | 329     | 87.1    | 316071 | 1580778600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 3.4     | 303     | 87.1    | 315570 | 1580231400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 3.7     | 328     | 87.1    | 313435 | 1579903800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 3.6     | 322     | 88.9    | 309384 | 1579635600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 3.5     | 322     | 90.7    | 303843 | 1579299000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1299430 | 10       | 3.6     | 331     | 90.7    | 301709 | 1579030800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1400632 | 10       | 3.9     | 320     | 81      | 356876 | 1584583800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1400632 | 10       | 4       | 331     | 82      | 336608 | 1581561000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1400632 | 10       | 3.9     | 326     | 82      | 321940 | 1581045000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1400632 | 10       | 3.6     | 302     | 83      | 313487 | 1580181000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 1400632 | 10       | 4       | 333     | 83      | 309398 | 1579659000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 258182  | 10       | 4.3     | 285     | 65.8    | 356925 | 1584839400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 258182  | 10       | 4.2     | 281     | 65.8    | 356793 | 1584148200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 258182  | 10       | 4.1     | 0       | 65.8    | 321925 | 1580951400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 258182  | 10       | 4.3     | 284     | 65.8    | 315594 | 1580350200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 258182  | 10       | 4.1     | 271     | 65.8    | 313453 | 1579975800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 258182  | 10       | 4.2     | 277     | 65.8    | 309426 | 1579831800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 258182  | 10       | 4.5     | 297     | 65.8    | 300194 | 1578852600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 3614    | 40       | 2       | 190     | 90.7    | 357013 | 1585343400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 3614    | 40       | 1.8     | 170     | 90.7    | 356919 | 1584803400    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 3614    | 40       | 2.2     | 207     | 93.9    | 356870 | 1584565800    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 3614    | 40       | 2.2     | 209     | 93.9    | 356728 | 1583788200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 4555    | 40       | 2.2     | 211     | 94.4    | 356922 | 1584814200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 4555    | 40       | 2.2     | 210     | 94.4    | 356844 | 1584411000    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 4555    | 40       | 2       | 190     | 94.4    | 316031 | 1580566200    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 4555    | 40       | 1.9     | 188     | 94.4    | 303878 | 1579446600    |
    +---------+----------+---------+---------+---------+--------+---------------+
    | 4555    | 40       | 2       | 189     | 94.4    | 300194 | 1578852600    |
    +---------+----------+---------+---------+---------+--------+---------------+

Я хотел бы написать MySQL запрос на присоединение и получение следующих столбцов:

+--------+---------+---------------+-------------------------------------------------+-------------------------------------------------+--------------+
| ID     | name    | Last division | average of the best 3 A scores in last 90 days | average of the best 3 B scores in last 90 days | Last C Score |
+--------+---------+---------------+-------------------------------------------------+-------------------------------------------------+--------------+
| 3614   | Name 4  | 40            | 2.1333                                          | 202                                             | 90.7         |
+--------+---------+---------------+-------------------------------------------------+-------------------------------------------------+--------------+
| 4555   | Name 5  | 40            | 2.1333                                          | 203.6667                                        | 94.4         |
+--------+---------+---------------+-------------------------------------------------+-------------------------------------------------+--------------+
| 258182 | Name 39 | 10            | 4.366                                           | 288.667                                         | 65.8         |
+--------+---------+---------------+-------------------------------------------------+-------------------------------------------------+--------------+
| 301187 | Name 15 | 30            | 2.833                                           | 245.333                                         | 85           |
+--------+---------+---------------+-------------------------------------------------+-------------------------------------------------+--------------+
| 758151 | Name 34 | 20            | 3.833                                           | 280.667                                         | 73           |
+--------+---------+---------------+-------------------------------------------------+-------------------------------------------------+--------------+
| 855547 | Name 27 | 20            | 3.4                                             | 247.33                                          | 72           |
+--------+---------+---------------+-------------------------------------------------+-------------------------------------------------+--------------+

Более подробно:

Деление - это деление, в котором игрок последний раз играл (по состоянию на последнюю дату) C Результаты также последние результаты (по дате) A и B - СРЕДСТВА ТОП-3 РЕЗУЛЬТАТОВ за последние 90 дней

Я получил это среднее с получением двух средних значений (показаны результаты A):

    select id, AVG(A score) from 
(select @rank:=if(@prev_cat=id,@rank+1,1) as rank,id,A score,@prev_cat:=id
from results,(select @rank:=0, @prev_cat:="")t
  order by id, A Score desc
  ) temp
  where temp.rank<=3
group by id

Сложность подзапросов вводит меня в заблуждение, и я немного устала от MySQL. Кто-нибудь может помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...