关于SQL组的访谈问题

问题描述 投票:1回答:1

这个问题来自以下问题

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,名称分组的话,不计算(salesperson_id)总是1吗?

我对此感到有点困惑,我想知道是否有人之前遇到过这个问题并且发现这个很奇怪。

sql group-by having having-clause
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.