2013-05-10 3 views
0

Я пытаюсь перечислить соотношение каждой команды в матчах, проигранных от общего количества сыгранных матчей.Коэффициент поиска на основе подсчета в Oracle SQL

Я попытался, но она не кажется, следующие работы:

select teams.name as Name, 
Lost 
from teams 
join matches on teams.name in (matches.home, matches.away) 
group by teams.name 
having (1 - (matches.winner/(count (matches.home) + count (matches.away)))) as Lost; 

ли проблема с тем, как я написал эту функцию в последней строке?

Реляционная схема для справки:

enter image description here

+0

Я просто +1 ваш вопрос, потому что это не так уж плохо, хотя вам нужно предоставить ошибку, которую вы получаете, а не ее работу. –

+0

Я считаю, что ваш формат модели ER довольно запутанный, если быть честным. Я никогда не видел такого графического представления. –

ответ

2

Предложение HAVING используется для фильтрации результирующего набора после любой группировки произошло, а не для определения функций. Вам нужно написать всю логику для столбцов, которые вам нужно вернуть в предложении SELECT.

SELECT T.NAME 
     ,COUNT(M.*) AS MATCHES_PLAYED 
     ,SUM(CASE WHEN M.WINNER = T.NAME THEN 1 ELSE 0 END) AS WINS 
     ,SUM(CASE WHEN M.WINNER = T.NAME THEN 0 ELSE 1 END) AS LOSSES 
     ,SUM(CASE WHEN M.WINNER = T.NAME THEN 1 ELSE 0 END)/COUNT(M.*) AS WIN_PERCENT 
     ,SUM(CASE WHEN M.WINNER = T.NAME THEN 0 ELSE 1 END)/COUNT(M.*) AS LOSS_PERCENT 
FROM TEAMS T 
INNER JOIN 
     MATCHES M 
ON  T.NAME = M.HOME 
OR  T.NAME = M.AWAY   
GROUP BY 
     T.NAME 
+0

Спасибо, но я получаю сообщение об ошибке 'count (m. *)', Есть ли другой способ его написать? (ошибка: 'invalid user.table.column, table.column или спецификация столбца') – Martin

+0

попробуйте' count (m.ID) 'во всех трех экземплярах. –

+0

Да, сейчас работает. благодаря – Martin

Смежные вопросы