2011-02-09 20 views
2
Select rating_id, average_rating 

From (Select rating_id, avg(rating_num) as average_rating 
    from ratings 
    group by rating_id 
    having count(*) > 50) 

HAVING average_rating > 4 ; 

運行查詢後,我得到一個錯誤mysql的,子查詢的問題

每個派生的表必須有它自己的別名

我知道的部分在這裏工作:

Select rating_id, avg(rating_num) as average_rating 
     from ratings 
     group by rating_id 
     having count(*) > 50 

我在這個子查詢中做錯了什麼?我搜查,搜查,搜查,但未能發現其中的錯誤,無論身在何處我糾正,我仍然得到錯誤

回答

1

認沽「爲SomeAlias」子查詢後:

Select rating_id, average_rating 

From (Select rating_id, avg(rating_num) as average_rating 
    from ratings 
    group by rating_id 
    having count(*) > 50) as A 

HAVING average_rating > 4 ; 
+0

謝謝你提醒我我的愚蠢。非常感謝洛倫佐 – Crsq 2011-02-09 19:03:51

2
Select rating_id, average_rating 

From (Select rating_id, avg(rating_num) as average_rating 
    from ratings 
    group by rating_id 
    having count(*) > 50) a 

HAVING average_rating > 4 ; 

說明表的別名「一」

3

隨着錯誤消息指出您需要添加一個別名,那麼子查詢:

SELECT rating_id, average_rating 
FROM (
    SELECT 
     rating_id, 
     AVG(rating_num) AS average_rating 
    FROM ratings 
    GROUP BY rating_id 
    HAVING COUNT(*) > 50 
) AS some_alias 
WHERE average_rating > 4 

some_alias可以是任何東西 - 要麼是子查詢的描述性名稱,要麼因爲您永遠不需要通過名稱引用子查詢,您可以使用非描述性名稱,如T1(然後是T2,T3等,如果有其他子查詢)。

此外,您可以在外部查詢中使用WHERE而不是HAVING。