2013-03-19 2 views
0

Для базы данных гаража, пытающейся найти средний балл для компонентов производителя во время тестирования раздела. Это следующий SQL, кажется, работает отлично:SELECT AVG, отображающий только один результат

SELECT component.manufacturer_id, AVG(section.grades) AS Grade_Average 
FROM section 
INNER JOIN component 
    ON section.mod_id=component.cid 
GROUP BY component.manufacturer_id 

Но будет давать только одну строку результатов (то есть только для одного manufacturer_id)

+1

Являются ли они более 'производителем_ид' в таблице? – hjpotter92

+0

«даст только один ряд результатов» или «дает только один ряд результатов». Поскольку GROUP BY вернет одно среднее значение для каждого уникального идентификатора производителя, который он найдет в JOIN. Если вы получаете только один результат, это означает, что есть только один идентификатор производителя. – duffymo

ответ

1

Если вы хотите вернуть все manufacturer_id значения, то вам нужно использовать LEFT JOIN:

SELECT component.manufacturer_id, 
    AVG(section.grades) AS Grade_Average 
FROM component 
LEFT JOIN section 
    ON status.mod_id=component.cid 
GROUP BY component.manufacturer_id; 

Ваш текущий запрос с использованием INNER JOIN, который будет возвращать только те строки, которые соответствуют между двумя таблицами.

Вы также используете status.mod_id в JOIN но вы присоединяетесь на section, вам нужно добавить присоединитесь к status или что это неправильно набран в исходное сообщение?

0

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

Смежные вопросы