Двойная группировка по нескольким таблицам - PullRequest
0 голосов
/ 30 мая 2020

У меня есть три соединенных таблицы.

select * 
from Ordering 
inner join Client on client.id=ordering.client_id 
inner join Dish on ordering.dish_id=dish.id

enter image description here

Я хотел бы суммировать quantity столбец и сгруппировать его по name_dish и позже client_id.

Сейчас сделал, но этого мало (на одного клиента):

select client.familyName, client.name, client.phone, sum(ordering.quantity),dish.name_dish 
from Ordering 
inner join Client on client.id=ordering.client_id 
inner join Dish on ordering.dish_id=dish.id 
where ordering.client_id=1 
group by (dish.name_dish)

enter image description here

1 Ответ

0 голосов
/ 30 мая 2020

Начиная с существующего запроса, вам необходимо поместить все select ed столбцы, которые не входят в агрегатную функцию, в предложение group by (то есть все столбцы, за исключением quantity). Я также предлагаю включить первичные ключи таблицы client и dish, на случай, если два клиента (соответственно блюда) имеют одно и то же имя.

Рассмотрим следующий совокупный запрос:

select c.family_name, c.name, c.phone, sum(o.quantity) sum_quantity, d.name_dish
from ordering o
inner join client c on c.id = o.client_id 
inner join dish d on o.dish_id = d.id
group by c.client_id, c.family_name, c.name, c.phone, d.id, d.name_dish

Некоторые базы данных (на самом деле, Postgres) довольствуются только первичными ключами двух таблиц в предложении group by:

select c.family_name, c.name, c.phone, sum(o.quantity) sum_quantity, d.name_dish
from ordering o
inner join client c on c.id = o.client_id 
inner join dish d on o.dish_id = d.id
group by c.client_id, d.id
...