这个问题在这里已经有了答案:
sql对所有行进行计数,而不是对单个行进行计数(1个答案)
两年前关门了。
我有一个供应商表和供应商评级表。我试图创建一个视图,在左侧显示所有供应商,在右侧显示他们的总体评级。我希望供应商出现,即使他们还没有评级。我正在使用MySQL5.7。我的问题是:
SELECT
vendors.ID,
vendors.Vendor,
ROUND(((AVG(`Cost_Rating`) + AVG(`Documentation_Rating`) + AVG(`Safety_Rating`) + AVG(`Equipment_Rating`) + AVG(`Performance_Rating`) + AVG(`Promptness_Rating`) + AVG(`Communication_Rating`))/7.0),2) as `Overall Rating`,
vendors.`Phone #`,
vendors.`Fax #`,
vendors.Website,
vendors.`Physical Address`,
vendors.`P.O. Box`,
vendors.City,
vendors.`State`,
vendors.Zip,
vendors.`Region Serving`,
vendors.Note,
vendors.OnVendorList,
vendors.`Search Words`,
ROUND(AVG(`Communication_Rating`),2) AS `Average Communication Rating`,
ROUND(AVG(`Promptness_Rating`),2) AS `Average Promptness Rating`,
ROUND(AVG(`Performance_Rating`),2) AS `Average Performance Rating`,
ROUND(AVG(`Equipment_Rating`),2) AS `Average Equipment Rating`,
ROUND(AVG(`Safety_Rating`),2) AS `Average Safety Rating`,
ROUND(AVG(`Documentation_Rating`),2) AS `Average Documentation Rating`,
ROUND(AVG(`Cost_Rating`),2) AS `Average Cost Rating`
FROM vendors
LEFT JOIN `Vendor Ratings` ON vendors.vendor = `vendor ratings`.vendor
无论我使用什么类型的连接,我都会得到相同的结果。我的问题在哪里?
1条答案
按热度按时间5rgfhyps1#
你失踪了
GROUP BY
在供应商身上。如果没有GROUPBY子句,查询只是计算总体聚合值(一次合并所有供应商)。请尝试以下操作:
另外,请注意select子句中的所有列,这些列不使用聚合函数,如
Avg()
,已添加到Group By
条款。do read:选择列表不在group by子句中,并且包含未聚合的列。。。。与sql不兼容\u mode=only \u full \u group by