代码之家  ›  专栏  ›  技术社区  ›  user98235

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

  •  1
  • user98235  · 技术社区  · 7 年前

    这个问题来自以下方面

    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
    

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tim Biegeleisen    7 年前

    您的解决方案和接受的解决方案在功能上都是相同的,除了 GROUP BY 条款。

    Name 和 salesperson_id 可能是两个或两个以上的销售人员碰巧同名。如果出现这种情况,您的查询将只报告一个姓名,但会报告来自多个销售人员的汇总结果。但是 和 姓名 应该总是独一无二的。

    salesperson 我们的桌子 Orders 表。