2017-04-01 87 views
0
SELECT e1.nombreEquipo, p1.idTemporada, COUNT (*) 
FROM equipo e1 INNER JOIN partido p1 
ON e1.nombreEquipo = p1.nombreLocal OR 
    e1.nombreEquipo = p1.nombreVisitante 
WHERE p1.golesLocal = p1.golesVisitante 
GROUP BY e1.nombreEquipo, p1.idTemporada 
HAVING COUNT(*) >= 
(
    SELECT COUNT (*) 
    FROM partido p2 
    WHERE (e1.nombreEquipo = p2.nombreLocal OR e1.nombreEquipo = p2.nombreVisitante) AND (p1.golesLocal = p2.golesLocal) AND 
      (p1.idTemporada = p2.idTemporada) 
) 

我試圖使用此代碼進行SQL查詢,但是當我嘗試運行腳本時遇到了ORA-00936錯誤。我在幾頁上看過,這個錯誤是由於沒有將所有選擇列逐行放入組中,但我認爲我沒有錯過任何一列。爲什麼在這裏得到ORA-00979?

這是我第一次使用SQL,不太瞭解它。

+0

COUNT(\ *)也會生成一列。嘗試將其更改爲COUNT(e1.nombreEquipo)或COUNT(p1.idTemporada)。 –

+2

那麼,ORA-00979還是ORA-00936? –

+0

@ luc14n0我知道,但是如果我將COUNT(*)放在組的最後,Eclipse的控制檯顯示ORA-00934錯誤 – alberto

回答

1

問題是HAVING子句中:

HAVING COUNT(*) >= (
    SELECT COUNT (*) 
    FROM partido p2 
    WHERE (e1.nombreEquipo = p2.nombreLocal OR 
      e1.nombreEquipo = p2.nombreVisitante 
     ) AND (p1.golesLocal = p2.golesLocal) AND 
-----------------^ 
      (p1.idTemporada = p2.idTemporada) 
) 

p1.golesLocal不在GROUP BY,因此它不能在聚合後使用,除非它是參數的聚集函數。

我不能建議修復,因爲我不知道查詢的意圖。

+0

中使用它,我必須展示在每個足球賽季中擁有最多關係數的足球隊。 – alberto

+1

@alberto。 。 。我建議你問*另一個問題。解釋問題並提供樣本數據和期望的結果。 (這個問題是關於語法錯誤的;另一個問題是關於解決你的問題。) –

相關問題