将计算计数列从一个视图添加到另一个视图

ggazkfy8  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(312)

我有一个视图,它引用了一个包含供应商联系信息的供应商表和一个供应商评分表,以显示每个供应商的平均评分。该视图在调出供应商信息和评级平均值时有效,但我有另一个视图,它告诉我每个供应商被评级的次数。此视图工作正常,但我无法使其在join视图中工作。
这是用于查看供应商信息和平均评级的代码:

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 OUTER JOIN `vendor ratings` ON vendors.Vendor = `vendor ratings`.Vendor
GROUP BY vendor

这是我的另一个视图的代码,它显示了每个供应商被评级的次数:

SELECT
Vendor,
COUNT(Vendor) AS `COUNT(Vendor)`
FROM `vendor ratings`
GROUP BY Vendor
ORDER BY Vendor

我尝试添加行:count(vendor as) COUNT(Vendor) ,转换为已经对其他所有内容都有效但没有成功的代码。我做错什么了?我只是想让结果看起来像这样。。。
供应商、平均评级、评级次数、电话等。。。。。。

ubbxdtey

ubbxdtey1#

在加入之前进行汇总(即使用子查询或“派生表”)

SELECT
      v.*
    , vr.*
FROM
FROM vendors v
LEFT JOIN (
     SELECT
            vendors.Vendor
          , COUNT(*)                                    AS `COUNT(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`
          , 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 `vendor ratings`
     GROUP BY vendors.Vendor
     ) vr ON v.Vendor = vr.Vendor

请注意,mysql有一种非常不幸的允许 group by 子句中只包含select子句中存在的少数非聚合列。这不是一个好的做法,它可能会导致“意想不到的结果”。mysql正在慢慢地改善这一领域,但您应该警惕这个问题,这是一个开始。只研究\u full \u group \u by
请注意,我不建议使用 select v.*, vr.* 在最后的代码中,列出所需的列,我这样做只是为了将注意力集中在子查询上
但是我建议您在连接之后的所有列前面加上相关的表前缀。

相关问题