2013-05-10 23 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你的問題,因爲它並沒有那麼糟糕,雖然你需要提供你正在接受的錯誤而不是它不工作。 – 2013-05-10 14:05:11

+0

我發現你的ER模型「格式」相當混亂,說實話。我從來沒有見過這樣的圖形表示。 – 2013-05-10 14:06:28

回答

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。*)'錯誤,有沒有其他的方式來寫它? (錯誤是:'無效的user.table.column,table.column或列規範') – Martin 2013-05-10 14:15:58

+0

在所有三個實例中嘗試'count(m.ID)'。 – 2013-05-10 14:20:10

+0

是的,現在運作。謝謝 – Martin 2013-05-10 14:44:46