这个问题来自以下问题
假设我们有两个表:
Salesperson
ID Name Age Salary
Orders
Number order_date cust_id salesperson_id Amount
问题如下:
我们想从上表中检索所有超过1个订单的销售人员的姓名。您可以假设每个销售人员只有一个ID。我可能还会认为名字都是截然不同的。
我的回答是这样的。
select Name from
salesperson S inner join Orders O
on S.ID=O.salesperson_id
group by Name
having count(number) >=2
但是,给出的答案如下:
SELECT Name
FROM Orders inner join Salesperson
On Orders.salesperson_id = Salesperson.ID
GROUP BY salesperson_id, NAME
Having count(salesperson_id) > 1
如果name和salesperson_id是一对一的,是否有任何理由我们必须将salesperson_id添加到group by语句中?另外,如果name和salesperson_id关系只是一对一的话,如果按salesperson_id,名称分组的话,不计算(salesperson_id)总是1吗?
我对此感到有点困惑,我想知道是否有人之前遇到过这个问题并且发现这个很奇怪。
除了GROUP BY
子句之外,您的解决方案和接受的解决方案在功能上都是相同的。
接受的解决方案是由Name
和salesperson_id
聚合的可能原因是,可能是两个或更多销售人员碰巧具有相同名称的情况。如果发生这种情况,您的查询将只报告一个名称,但会报告来自多个销售人员的汇总结果。但是,salesperson_id
和Name
的组合应始终是独一无二的。
除此之外,我实际上更喜欢你的版本,我会开始从salesperson
表加入Orders
表。