首页 文章

选择多个表的平均值

提问于
浏览
-2

我有以下查询:

"SELECT
    bnbs.name,
    bnbs.slug,
    bnbs.city,
    bnbs.website,
    bnbs.description,
    bnbs.profile_picture,
    bnbs.price_low,
    (SELECT AVG(ROUND((ratings.rating_room+ratings.rating_cleanliness+ratings.rating_service+ratings.rating_meals+ratings.rating_general)/5)) FROM ratings) AS average
FROM
    bnbs
        JOIN
            accounts
                ON
                    bnbs.account_id = accounts.account_id
WHERE
    bnbs.average = 3
AND
    bnbs.visible = 1
AND
    accounts.active = 1
AND
    accounts.confirmed = 1";

当我 remove 在where clausule "bnbs.average = 3"时,查询有效,但我想从 ALL 计算表评级中每个bnb的评级的平均评分(每个bnb可以有多个评级),我想选择所有评级= 3或者> 3或者4的bnbs ......我想你明白了 .

有人有想法吗?

1 回答

  • 0

    选择列表中的 average 字段是计算字段,不是bnbs表的一部分,因此mysql可能会给您一个未知的字段错误 . 计算字段可以在having子句中过滤,而不是在where子句中过滤 .

    SELECT
        bnbs.name,
        bnbs.slug,
        bnbs.city,
        bnbs.website,
        bnbs.description,
        bnbs.profile_picture,
        bnbs.price_low,
        (SELECT AVG(ROUND((ratings.rating_room+ratings.rating_cleanliness+ratings.rating_service+ratings.rating_meals+ratings.rating_general)/5)) FROM ratings) AS average
    FROM
        bnbs
            JOIN
                accounts
                    ON
                        bnbs.account_id = accounts.account_id
    WHERE
        bnbs.visible = 1
    AND
        accounts.active = 1
    AND
        accounts.confirmed = 1
    HAVING average = 3
    

    但是,选择列表中的子查询计算所有bnbs记录的相同平均值,因为我没有看到其中的任何标准 . 您还可以删除子查询并在连接列表中添加评级表并使用group by . 在这种情况下,您仍然需要在having子句中过滤您想要查看的平均值 .

相关问题