首页 文章

从数据库返回平均评级(SQL)

提问于
浏览
1

我正在尝试创建一个评级系统,用户可以对图片/视频/音频等进行评分 . 我目前有两张 table

Table: products
Cols:  product_id[PK] | name | category | type | link

这是产品表,包含有关产品的信息 . 如果您对产品感到困惑,可以将“产品”视为图像/视频/音频,我将其命名为仅仅是为了让我更容易理解它 . 第二个表是评级

Table: product_ratings
Cols:  rating_id[PK] | rating | product_id | timestamp

该表存储有关用户给出的评级的信息 .

我想要一个页面,它将显示所有“产品”的最高评级(平均) . 到目前为止,我已经浏览了SA,并找到了以下代码:

SELECT
p.product_id, p.name,
AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id
WHERE p.product_id = 1

这只返回特定product_id的平均评级,我将如何获得所有product_ids及其平均评级,以及如何通过PHP找到最高评分?

我试过了:

WHERE p.product_id < 1 AND p.product_id < 30

但这只返回product_id为2,其名称和average_rating,我不明白 .

欢迎提供指导/材料链接

3 回答

  • 4

    试一试:

    SELECT
    p.product_id, p.name,
    AVG(pr.rating) AS rating_average
    FROM products p
    INNER JOIN product_ratings pr
    ON pr.product_id = p.product_id
    

    这也是毫无意义的表达:

    WHERE p.product_id < 1 AND p.product_id < 30
    

    因为它完全等同于

    WHERE p.product_id < 1
    

    而且我怀疑你的ids低于零

  • 4

    您的查询已结束 . 只需删除过滤所有内容的WHERE子句即可 .

    SELECT     p.product_id, p.name,
               AVG(pr.rating) AS rating_average
    FROM products p
    INNER JOIN product_ratings pr
    ON pr.product_id = p.product_id
    ORDER BY rating_average DESC
    

    这将返回每个产品的平均值,并按结果集顶部的最高平均评级进行排序 .

  • 0
    SELECT
        p.product_id,
        p.name,
        AVG(pr.rating) AS rating_average
    FROM products p
    INNER JOIN product_ratings pr
    ON pr.product_id = p.product_id
    GROUP BY p.product_id
    ORDER BY rating_average DESC
    LIMIT 1
    

相关问题