[英]Interview Question about SQL group by and having
此問題來自以下
假設我們有兩個表:
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添加到分組中? 另外,如果名稱和salesperson_id的關系只是一對一,那么如果我們按salesperson_id,name分組,是否不將(salesperson_id)始終設為1?
我對此有些困惑,我想知道是否有人以前曾遇到過這個問題,也發現這很奇怪。
除了GROUP BY
子句外,您的解決方案和可接受的解決方案在功能上都是相同的。
接受的解決方案同時按Name
和salesperson_id
匯總的可能原因是,可能是兩個或多個銷售人員碰巧具有相同的名稱。 如果發生這種情況,您的查詢將僅報告一個名稱,但會報告來自多個銷售人員的匯總結果。 但是, salesperson_id
和Name
的組合應該始終是唯一的。
除此之外,我實際上更喜歡您的版本,並且我將從salesperson
表開始加入到Orders
表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.