sql - 从另一个 MySQL 表计算平均值

标签 sql mysql

我有 2 个表,一个是供应商,一个是 supplier_feedback - 如何计算每个供应商的平均评分?我目前有这个:

SELECT s.premium, s.supplier_id, s.name, s.phone, s.website, 
    s.price_low, s.price_high, s.address1, s.address2, s.town,
    s.county, s.postcode, 
    (SUM( f.rating ) / ( COUNT( f.rating ) -1 )) AS rate, 
    GROUP_CONCAT( REPLACE( t.name, ' ', ',' ) SEPARATOR ',' ) AS tags
FROM suppliers AS s
JOIN suppliers_to_tags AS st ON st.supplier_id = s.supplier_id
JOIN supplier_tags AS t ON t.tag_id = st.tag_id
JOIN supplier_feedback AS f ON s.supplier_id = f.supplier_id
GROUP BY s.supplier_id
HAVING tags LIKE '%HI%'
ORDER BY s.premium DESC
LIMIT 0 , 30

但是我得到了非常奇怪的结果,这肯定是不正确的。

supplier_feedback 表会有很多条记录,但由于各种原因,第一条记录必须打折。

最佳答案

使用子查询使事情变得更简单,这样您就可以单独测试子查询的正确性以及所有与其他表的连接。

(SELECT supplier_id, AVG(rating) AS avg_rating 
FROM supplier_feedback WHERE feedback_id != x GROUP BY supplier_id)

假设 feedback_id(无论反馈表的主键是什么)不变,您可以从子查询中排除要忽略的记录,其余的将取平均值。

然后您可以加入:

    SELECT s.*, r.avg_rating
    FROM suppliers s
    JOIN 
    (SELECT supplier_id, AVG(rating) AS avg_rating 
    FROM supplier_feedback WHERE feedback_id != x GROUP BY supplier_id) r
    ON s.supplier_id = r.supplier_id

关于sql - 从另一个 MySQL 表计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1762513/

相关文章:

mysql - 在mysql中转换为自午夜以来的秒数的更方便的方法

java - 当新数据插入 MySQL 数据库时,如何自动更新 recyclerView?

mysql - 使用子查询的错误查询优化器策略

c# - 存储具有许多数据点的用户

mysql - 将不同的列合并为一列,然后按此排序

php - 如何将两个 PDO 查询合并为一个?

mysql - 选择不在同一个表上的多个字段中

mysql - 在MySql中查找重复的电子邮件并根据条件删除某些电子邮件

c# - ASP.NET 中将数据库中的行配置为在特定时间后删除的最佳方法

php - MySQL PHP CMS URL 创建(需要编辑)