下面是一个简单的查询:

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/

10-11 03:12
查看更多