Mysql, SubQuery проблемы - PullRequest
       7

Mysql, SubQuery проблемы

2 голосов
/ 09 февраля 2011
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 ;

После выполнения запроса я получаю сообщение об ошибке

Каждая производная таблица должна иметь свой собственный псевдоним

Я знаю, что раздел здесь работает:

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

Что я делаю не так в этом подзапросе? Я искал, искал и искал, но не смог найти ошибку, где бы я ни исправлял, я все равно получаю ошибки

Ответы [ 3 ]

3 голосов
/ 09 февраля 2011

Как говорится в сообщении об ошибке, вам нужно добавить псевдоним для вашего подзапроса:

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.

2 голосов
/ 09 февраля 2011
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 ;

Обратите внимание на псевдоним таблицы "a"

1 голос
/ 09 февраля 2011

Поставьте "как 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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...