2017-04-01 52 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。 。 。我建议你问*另一个问题。解释问题并提供样本数据和期望的结果。 (这个问题是关于语法错误的;另一个问题是关于解决你的问题。) –

相关问题