MYSQL запрос, который содержит 2 вещи, которые мне нужны в 1 запросе - PullRequest
0 голосов
/ 19 сентября 2018

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

ID    userid    sessionid    sprintid    pointvalue1    pointvalue2  pointvalue3
1      1          1             1             10            5             2
2      2          1             1             10            5             3
3      3          1             1             12            6             3
4      1          1             2             10            6             4
5      2          1             2             12            5             3
6      3          1             2              9            4             3 

Как видно из вышесказанного, есть 1 сеанс, 2 разных спринта (итерации) и 3 разных пользователя.,Я хочу показать таблицу лидеров.Таблица лидеров будет показывать (по итерации), имя пользователя (из другой таблицы), спринт, значение 1 балла, значение 2 балла, значение 3 балла, сумму значения 1 балла кумулятивно для всех итераций в этом сеансе.Таким образом, на итерации 1 совокупное значение точки 1 и сумма баллов 1 будут одинаковыми.Но на итерации 2 я должен увидеть сумму баллов 1 из 20 для пользователя 1, 22 для пользователя 2 и 21 для пользователя 3 в правильном порядке (по убыванию).Я попытался выполнить подзапрос, используя сумму выборки, но не смог сделать все правильно, и я попытался использовать SUM (IF ()), что казалось правильным, но это не так.Я думаю, мне нужно какое-то руководство, в каком направлении идти.

1 Ответ

0 голосов
/ 19 сентября 2018

Я думаю, что этот запрос даст вам необработанные данные, которые вы хотите.Возможно, вы захотите скорректировать запрос с помощью некоторой формы упорядочения по суммарным баллам и, возможно, предложениями WHERE и LIMIT, чтобы удовлетворить ваши точные потребности.

SELECT s1.userid, 
       s1.sessionid,
       s1.sprintid,
       s1.pointvalue1,
       s1.pointvalue2,
       s1.pointvalue3,
       SUM(s2.pointvalue1) AS sum_pointvalue1,
       SUM(s2.pointvalue2) AS sum_pointvalue2,
       SUM(s2.pointvalue3) AS sum_pointvalue3
FROM scores s1
JOIN (SELECT userid, 
             sessionid,
             sprintid,
             SUM(pointvalue1) AS pointvalue1,
             SUM(pointvalue2) AS pointvalue2,
             SUM(pointvalue3) AS pointvalue3
      FROM scores
      GROUP BY userid, sessionid, sprintid
     ) s2
ON s2.userid = s1.userid AND s2.sessionid = s1.sessionid AND s2.sprintid <= s1.sprintid
GROUP BY userid, sessionid, sprintid
ORDER BY sprintid

Вывод:

userid  sessionid   sprintid    pointvalue1     pointvalue2     pointvalue3     sum_pointvalue1     sum_pointvalue2     sum_pointvalue3
2       1           1           10              5               3               10                  5                   3
3       1           1           12              6               3               12                  6                   3
1       1           1           10              5               2               10                  5                   2
2       1           2           12              5               3               22                  10                  6
3       1           2           9               4               3               21                  10                  6
1       1           2           10              6               4               20                  11                  6

Демонстрация SQLFiddle

...