繁体   English   中英

在多个表中双重分组

[英]Double group by in multiple tables

我有三个连接的表。

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

在此处输入图像描述

我想按name_dish和后来的client_id对总quantity列和分组。

现在我做到了,但这还不够(对于一个客户):

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)

在此处输入图像描述

从现有查询开始,您需要将不在聚合 function 中的所有select ed 列放在group by子句中(即除quantity之外的所有列)。 我还建议包括clientdish桌的主键,以防两个客户端(分别是菜)具有相同的名称。

考虑以下聚合查询:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM