关于 SQL group by 和 having 的面试问题

Interview Question about SQL group by and having

此问题来自以下

https://www.programmerinterview.com/index.php/database-sql/advanced-sql-interview-questions-and-answers/

假设我们有两个表:

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、name?

分组,count(salesperson_id) 不会总是 1

我对此有点困惑,我想知道以前是否有人遇到过这个问题并且也觉得这很奇怪。

除了 GROUP BY 子句外,您的解决方案和已接受的解决方案在功能上完全相同。

接受的解决方案被 Namesalesperson_id 聚合的可能原因是两个或更多销售人员碰巧有相同的名字。如果发生这种情况,您的查询将只报告一个姓名,但包含来自多个销售人员的汇总结果。但是,salesperson_idName 的组合应该始终是唯一的。

除此之外,我实际上更喜欢你的版本,我会从 salesperson table 开始加入 Orders table。