这是一个简单的查询:
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
标识。这就是为什么我问为什么我必须做这样的把戏。
最佳答案
将 customers.name 添加到 GROUP BY
子句:
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 - 分组依据和内连接 : how to select joined without a "max" trick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364198/