采访有关SQL分组的问题

时间:2019-03-14 04:39:04

标签: sql group-by having having-clause

此问题来自以下

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

如果名称和salesperson_id是一对一的,我们是否有任何理由必须在此处按语句将salesperson_id添加到分组中?另外,如果name和salesperson_id的关系只是一对一,那么如果我们按salesperson_id,name分组,就不算(salesperson_id)总是1。

对此我有些困惑,我想知道是否有人以前曾遇到过这个问题,也发现这很奇怪。

1 个答案:

答案 0 :(得分:0)

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

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

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