2011-02-09 69 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。