2016-10-06 4 views
0

Необходимо использовать группу по 3-х столовому соединению. Мне нужно суммировать цены на автомобили, сгруппированные по моделям, а также показать, что категория модель (и автомобиль) принадлежитГруппировка по 3 таблице присоединиться к SQL

«Accord» появляется 2 раза и суммируется быть 20, в то время «Toyota» принадлежит той же модели тоже и суммируется в той же модели. И в последнем 'Bellen' который только 1 автомобиль. Наряду со всеми суммируемыми ценами и моделями каждая категория модели также показана по ряду причин.

enter image description here

Я присоединяюсь и просуммировать цену, ниже запроса, но показывает ошибку, которую я предполагаю, вызывается третий столбец таблицы, который не был в состоянии сгруппированы в зависимости от состояния. Как мне получить требуемый результат?

недействителен в списке выбора, поскольку он не содержится ни в агрегатной функции , ни в предложении GROUP BY.

SELECT sum(cars.price),models.model,categories.category 
FROM cars 
INNER JOIN 
models 
ON cars.mid=models.id 
inner join 
categories 
on models.model=categories.model 
group by models.model ORDER BY cars.name 
+1

Вам нужно сгруппировать по категориям.категорию или удалить опцию. Любой столбец в предложении select должен быть агрегатом или указан в группе. Зачем вам нужны линии один и два, чтобы быть разными, если они являются одной и той же моделью и той же категорией. – MageeWorld

+0

Вы правы. Я ошибся там. Мне нужна такая же модель автомобиля. Цена не суммируется отдельно. – phpnet

+0

Просто для уточнения, на вашем изображении вы есть таблица с именем car - это значит быть машиной или машинами? – Louie

ответ

2

Если предположить, что имена таблиц/имена столбцов являются правильными в диаграмме

данных:

CREATE TABLE car (price INT, name NVARCHAR(128), mid INT) 
GO 

INSERT INTO car 
VALUES (10, 'Accord', 1), 
     (10, 'Accord', 1), 
     (30, 'Bellen', 3), 
     (40, 'Toyota', 1) 
GO 

CREATE TABLE models (id INT, model INT) 
GO 

INSERT INTO models 
VALUES (1, 1889), 
     (2, 1999), 
     (3, 2000) 
GO 

CREATE TABLE categories (model INT, category NVARCHAR(128)) 
GO 

INSERT INTO categories 
VALUES (1889, '800 cc'), 
     (1999, '1200 cc'), 
     (2000, '1500 cc') 
GO 

Запрос:

SELECT sum(car.price) "Sum Price", models.model "Model", categories.category "Category" 
FROM car 
INNER JOIN models ON car.mid=models.id 
INNER JOIN categories ON models.model=categories.model 
GROUP BY models.model, categories.category 
ORDER BY models.model, categories.category 

Результаты:

Sum Price Model Category 
60   1889 800 cc 
30   2000 1500 cc 
+0

Предоставление справок: «Идентификатор из нескольких частей« cars.name »не может быть связан». «Идентификатор с несколькими частями« cars.name »не может быть связан». 'Идентификатор из нескольких частей "categories.category" не может быть связан.' – phpnet

+1

Я отредактировал ответ, чтобы удалить группу с помощью cars.net - ее не должно было быть, поскольку она не была частью оператора select, если вам нужно название автомобиля, вы должны добавить cars.name в оператор select и сохранить его в группе. Просто помните, что если он находится в предложении select, он либо должен быть агрегатом ИЛИ в предложении group by - всегда – MageeWorld

+0

@phpnet вы могли бы дважды проверить свою диаграмму? Не могли бы вы подтвердить имена таблиц/имена столбцов? Ive проверил его с помощью имен таблиц/имен столбцов, и он отлично работает – Louie

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