MySQL Average: сделать заявление более эффективным - PullRequest
0 голосов
/ 02 января 2012

Я использую этот оператор MySQL, чтобы найти оценку среднего свойства района. Проблема в том, что мне нужно добавить инструкцию SELECT для каждой окрестности - и есть много окрестностей. Есть ли способ сделать это без указания «ПЕРЕДНИЙ РЕК» или «СТАРЫЙ ГОРОД»? Есть ли более эффективный способ?

SELECT AVG(property_table.assessment) 
FROM property_table, neighborhood_table  
WHERE property_table.id = neighborhood_table.id AND neighborhood_table.neighborhood = 'RIVER FRONT'
    UNION ALL
SELECT AVG(property_table.assessment) 
FROM property_table, neighborhood_table  
WHERE property_table.id = neighborhood_table.id AND neighborhood_table.neighborhood = 'OLD TOWN'

Ответы [ 2 ]

1 голос
/ 02 января 2012

Это стандартный агрегатный оператор SQL, который показывает средние значения для всех окрестностей.
Левое объединение позволяет получить нулевые значения, если в окрестности нет свойства.

SELECT 
    n.neighborhood, COALESCE(AVG(p.assessment), 0)
FROM
    neighborhood_table n
    LEFT JOIN 
    property_table p ON p.id = n.id
GROUP BY 
    n.neighborhood;
0 голосов
/ 02 января 2012
SELECT AVG(property_table.assessment), neighborhood_table.neighborhood
FROM property_table
INNER JOIN neighborhood_table ON property_table.id = neighborhood_table.id
WHERE neighborhood_table.neighborhood IN ('RIVER_FRONT', 'OLD TOWN')
GROUP BY neighborhood_table.neighborhood;
...