Интервью Вопрос о группе SQL по и имея - PullRequest
1 голос
/ 14 марта 2019

Эта проблема из следующих

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 заказа из таблиц выше. Можно предположить, что у каждого продавца только один идентификатор. Вероятно, я бы также предположил, что все имена разные.

Мой ответ был таким.

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) всегда 1, если мы группируем по salesperson_id, name?

Я был немного смущен этим, и мне было интересно, сталкивался ли кто-нибудь с этой проблемой раньше и находил ли это также странным.

1 Ответ

0 голосов
/ 14 марта 2019

Ваше решение и принятое решение функционально идентичны, за исключением пункта GROUP BY.

Вероятная причина, по которой принятое решение агрегирует как по Name, так и salesperson_id, заключается в том, что два или более продавца имеют одно и то же имя. В этом случае ваш запрос будет содержать только одно имя, но с совокупными результатами более чем одного продавца. Но комбинация salesperson_id и Name всегда должна быть уникальной.

Кроме этого, я на самом деле предпочитаю вашу версию, и я бы начал объединяться из таблицы salesperson в таблицу Orders.

...