此问题来自以下
假设我们有两个表:
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
如果名称和salesperson_id是一对一的,我们是否有任何理由必须在此处按语句将salesperson_id添加到分组中?另外,如果name和salesperson_id的关系只是一对一,那么如果我们按salesperson_id,name分组,就不算(salesperson_id)总是1。
对此我有些困惑,我想知道是否有人以前曾遇到过这个问题,也发现这很奇怪。
答案 0 :(得分:0)
除了GROUP BY
子句以外,您的解决方案和可接受的解决方案在功能上都是相同的。
接受的解决方案同时由Name
和salesperson_id
进行汇总的可能原因是,可能是两个或多个销售人员碰巧具有相同的名称。如果发生这种情况,您的查询将仅报告一个名称,但会报告来自多个销售人员的汇总结果。但是,salesperson_id
和Name
的组合应该始终是唯一的。
除此之外,我实际上更喜欢您的版本,我将开始从salesperson
表加入到Orders
表。