下面是一个简单的查询:
SELECT orders.id, customers.name, COUNT(order_product.id)
FROM orders
INNER JOIN order_product ON orders.id = order_product.order_id
INNER JOIN customers ON orders.customer_id = customers.id
GROUP BY orders.id;
换句话说,我想要:
订单的ID。
每个订单中的产品数量(计数)。
订单的客户名称。
问题在于选择
customers.name
。我不能直接选择它,因为它不在聚合函数或分组依据中。但是只有一个,所以我不知道为什么我要把它加起来。我可以用这样的方法来选择它的名称:SELECT MAX(customers.name)
但我认为这是肮脏的,因为我不想要“订单的最大客户名称”而是“订单的客户名称”。做这种事的优雅方法是什么?
希望它是清楚的,而不是重复的。
编辑:一个订单只有一个客户通过
orders.customer_id
标识。这就是为什么我要问为什么我要做这样的把戏。 最佳答案
在GROUP BY
子句中添加customers.name:
SELECT orders.id, customers.name, COUNT(order_product.id)
FROM orders
INNER JOIN order_product ON orders.id = order_product.order_id
INNER JOIN customers ON orders.customer_id = customers.id
GROUP BY orders.id, customers.name
通常,您可以简单地按所有选定列分组,这些列不是设置函数的参数!
关于sql - 分组方式和内部联接:如何选择没有“最大”技巧的联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42364198/