Как я могу получить коэффициент выигрыша стоимости в sql? - PullRequest
0 голосов
/ 31 мая 2019

В моей базе данных есть две таблицы: одна называется «ЛИГИ», а другая - «МАТЧИ». Я хочу получить выигрыш каждой лиги в зависимости от благоприятного результата матчей, связанных с этими лигами.

Структура таблиц:

#######################  ###########################
#   TABLE LEAGUES     #  #       TABLE MATCHES     #
#######################  ########################### 
+----------+----------+  +-------------------------+ 
|    ID    |   name   |  |ID|match|League_id|Result|
+----------+----------+  +--+-----+---------+------+
|     1    |   aaa    |  |1 |xxxxx|    1    |  W   |
|     2    |   bbb    |  |2 |xxxxx|    1    |  L   |
|     3    |   ccc    |  |3 |xxxxx|    2    |  W   |
|     4    |   ddd    |  |4 |xxxxx|    3    |  W   |
+----------+----------+  |5 |xxxxx|    3    |  L   |
                         |6 |xxxxx|    3    |  W   |
                         +--+-----+---------+------+

Результат, который я хочу:

#######################
#       RESULT        #
#######################
+----------+----------+  
|league.id | Winrate  | 
+----------+----------+
|     1    |   50%    |
|     2    |   100%   |
|     3    |   66%    | 
+----------+----------+

Я попробовал следующий код, но он не работает, потому что подзапрос возвращает более одного значения:

SELECT leagues.id, COUNT(leagues.id)*100/(SELECT COUNT(leagues.id) 
                              FROM leagues,matches WHERE 
                              leagues.id=matches.League_id 
                              GROUP BY leagues.id) as winrate 
FROM leagues,matches
WHERE leagues.id=matches.League_id and matches.result like 'W'
GROUP BY leagues.id

Есть ли другой способ получить эти результаты? Заранее спасибо.

1 Ответ

3 голосов
/ 31 мая 2019

Вы, кажется, хотите:

SELECT m.League_id,
       AVG( m.result = 'W' ) as winrate
FROM matches m
GROUP BY m.League_id;

Примечания:

  • Вам не нужна таблица leagues, потому что нужное вам поле находится в matches.
  • Изучите правильный, явный, стандартный JOIN синтаксис (хотя это не обязательно для этого запроса).
  • MySQL рассматривает логические значения как числа в числовом контексте, где 1 для true и 0 для false, поэтому AVG( <boolean expression> ) возвращает соотношение истинных значений. Довольно изящный.
  • Хотя они и делают одно и то же, = чаще используется для сравнений на равенство, чем like.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...