Добавить вычисляемый столбец COUNT из одного представления в другое представление - PullRequest
0 голосов
/ 13 октября 2018

У меня есть представление, ссылающееся на таблицу поставщиков с контактной информацией поставщика и таблицу vendor_ratings, чтобы отобразить среднюю оценку для каждого поставщика.Представление работает при получении информации о поставщике и средних рейтингах, но у меня есть другое представление, которое сообщает мне, сколько раз каждый поставщик был оценен.Это представление работает нормально, но я не могу заставить его работать в моем представлении соединения.

Это код для представления, которое работает с информацией о поставщике и средними оценками:

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)) в код, который уже работает для всего остального, но безуспешно. Что я делаю не так? Я просто результаты, чтобывыглядеть следующим образом ...

Поставщик, Рейтинг Ave, Номинальное количество раз, Номер телефона и т. д. ......

1 Ответ

0 голосов
/ 13 октября 2018

Выполните суммирование перед присоединением (т. Е. Используйте подзапрос или «производную таблицу»)

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 иметь только нескольконеагрегирующие столбцы, которые существуют в предложении выбора.Это НЕ хорошая практика, и это может привести к «неожиданным результатам».Постепенно MySQL улучшает эту область, но вы должны быть готовы к этой проблеме , вот и начало .Исследование only_full_group_by

  • обратите внимание, я НЕ рекомендую использовать select v.*, vr.* в вашем конечном коде, перечислите столбцы, которые вам нужны, я сделал это только для того, чтобы сосредоточить внимание на подзапросе
  • но я действительно рекомендую ставить ВСЕ столбцы после объединения соответствующим префиксом таблицы.
...