2011-11-03 132 views
0

我收到错误“ORA-00907:缺少右括号” 但我已检查并且所有括号都在那里,所以我很难过。ORA-00907:缺少右括号

我的查询是

SELECT 
    SUM(score) as score, 
    facebook_id, 
    firstname, 
    lastname, 
    dense_rank(score) 
WITHIN GROUP (ORDER BY score) as rank_db 
FROM 
    (
    SELECT DISTINCT * 
    FROM 
     (
     SELECT * 
     FROM fanta_score 
     ORDER BY score desc 
    ) as f 
    GROUP BY 
     facebook_id, game_id 
) as g 
GROUP BY facebook_id 
ORDER BY score DESC, created_at 
LIMIT 50 

我绝不是一个Oracle专家,但我不得不使用它,由于托管环境的必须是英寸

+0

我在想这可能是与限制声明有关? – ZaV

+0

您是否尝试过注释每个查询的内容(正在处理内部/外部)并查看哪些语句会产生错误? –

+0

此外,这并不能真正解决您的问题,但您不希望在子查询中拥有ORDER子句。这会导致查询性能下降,因为优化程序在排序后不再使用索引,因为它必须使结果集变平。当他们真的不需要订购时,人们通常会订购子查询。 –

回答

0

limit命令无法识别在Oracle中。并应使用ROWNUM而不是限制

SELECT 
    SUM(score) as score, 
    facebook_id, 
    firstname, 
    lastname, 
    dense_rank(score) 
WITHIN GROUP (ORDER BY score) as rank_db 
FROM 
    (
    SELECT DISTINCT * 
    FROM 
     (
     SELECT * 
     FROM fanta_score 
     ORDER BY score desc 
    ) as f 
    GROUP BY 
     facebook_id, game_id 
) as g 
WHERE ROWNUM = 50 
GROUP BY facebook_id 
ORDER BY score DESC, created_at 
+1

我猜这应该是rownum <= 50?你写的查询将返回零行,对吧? – eaolson

+0

谢谢,我彻底删除了限制,我仍然得到相同的错误。 – ZaV

+0

也许,你可以指定这样的,但没有问题,如果你想把** ROWNUM = 50 ** – ppshein