我有 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/