2016-04-07 27 views
1

我想獲得兩項罪名和Oracle 11g劃分他們...我想它的兩個版本的Oracle 11g獲得兩項罪名,並劃分它們

1)

SELECT 
    x.number/y.number 
FROM 
(
    SELECT 
    COUNT(*) as "number" 
    FROM 
    GAME 
    WHERE 
    HOMETEAM='Blackpool' 
    AND FTR='H' 
    OR AWAYTEAM='Blackpool' 
    AND FTR='A' 
) x 
join (
    SELECT COUNT(*) as "number" 
    FROM GAME 
    WHERE HOMETEAM='Blackpool' 
     OR AWAYTEAM='Blackpool' 
)y; 

我得到下面的錯誤

ORA-01747:無效user.table.column,TABLE.COLUMN,或列 說明書 01747. 00000 - 「無效user.table.column,TABLE.COLUMN,或列SPECI fication」

*原因:
*行動:行錯誤:1列:10

2)

select 
    (
    SELECT COUNT(*) 
    FROM GAME 
    WHERE HOMETEAM='Blackpool' 
     AND FTR='H' 
     OR AWAYTEAM='Blackpool' 
     AND FTR='A' 
    ) /
    (
    SELECT COUNT(*) 
    FROM GAME 
    WHERE HOMETEAM='Blackpool' 
    OR AWAYTEAM='Blackpool' 
    ); 

後,我跑這一個..我得到下面的錯誤

ORA-00923:在預期的位置找不到FROM關鍵字 00923. 00000 - 「找不到預期的FROM關鍵字」 *原因:
*行動:行錯誤:3欄:84

+0

這與MySQL有關嗎?請刪除標籤 – Marged

+0

與您的問題無關:雖然AND優先於OR,但我仍然使用括號來提高可讀性:WHERE(HOMETEAM ='Blackpool'AND FTR ='H' )或(AWAYTEAM ='黑池'AND FTR ='A')'。 –

回答

3
SELECT x."number"/y."number" 
FROM 
(SELECT COUNT(*) as "number" 
    FROM GAME 
WHERE HOMETEAM='Blackpool' AND FTR='H' OR AWAYTEAM='Blackpool' AND FTR='A') x 
cross join 
(SELECT COUNT(*) as "number" 
    FROM GAME 
    WHERE HOMETEAM='Blackpool' OR AWAYTEAM='Blackpool') y; 

Number保留字。如果您堅持使用它,然後總是使用「(雙引號)。 使用CROSS JOIN當你不打算有任何ON子句。您還可以使用JOIN ON 1 = 1

select 
(SELECT COUNT(*) 
    FROM GAME 
    WHERE HOMETEAM='Blackpool' AND FTR='H' OR AWAYTEAM='Blackpool' AND FTR='A')  
/
(SELECT COUNT(*) 
FROM GAME 
WHERE HOMETEAM='Blackpool' OR AWAYTEAM='Blackpool') 
from dual 

添加From dual,它會正常工作。