Shao Voon Wong Ответов: 2

Как отобразить результат при count=0 для внутреннего соединения SQL?


Это интервью с тестом SQL, который поставил меня в тупик. Вот вопрос: в каждом филиале офиса есть квота продаж, которую должен выполнить каждый продавец. SQL-запрос должен отображать количество продавцов в каждом филиале, равное или превышающее квоту продаж. Есть 2 таблицы, Branch и SalesPerson. SalesPerson связано с Branch через BranchID. Branch стол имеет Quota поле, которое должно быть выполнено каждым SalesPersonSales Поле.
Предусмотрены команды SQL для создания таблиц.
CREATE TABLE [dbo].[Branch](
	[ID] [int] NOT NULL,
	[Quota] [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[SalesPerson](
	[ID] [int] NOT NULL,
	[Name] [nchar](10) NOT NULL,
	[Sales] [int] NOT NULL,
	[BranchID] [int] NOT NULL
) ON [PRIMARY]
GO

Ниже приведены команды SQL для заполнения таблиц.
INSERT INTO Branch (ID, Quota) VALUES (1, 500);
INSERT INTO Branch (ID, Quota) VALUES (2, 600);

INSERT INTO SalesPerson (ID, Name, Sales, BranchID) VALUES (1, 'John', 500, 1);
INSERT INTO SalesPerson (ID, Name, Sales, BranchID) VALUES (2, 'Jane', 400, 2);


Что я уже пробовал:

SELECT B.ID AS BranchNum, COUNT(*) AS EligibleSalesPersonCount FROM 
SalesPerson AS S INNER JOIN Branch AS B ON (S.BranchID = B.ID)
WHERE S.Sales >= B.Quota
GROUP BY B.ID;


Мой Выход
BranchNum	EligibleSalesPersonCount
1	        1

Ожидаемый Результат
BranchNum	EligibleSalesPersonCount
1	        1
2	        0


Мой вопрос заключается в том, как отобразить результат, когда EligibleSalesPersonCount равен 0?

2 Ответов

Рейтинг:
2

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.
А вопросы собеседования-это домашнее задание на стероидах: еще менее справедливо для нас отвечать на них, как если бы мы ставили в невыгодное положение людей, которые могут выполнить работу, на которую вы подали заявку.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Если вы не можете выполнить эту простую задачу, вы действительно не готовы получить эту работу и плохо провалите собеседование, если пройдете этот этап.
Удачи вам с поиском работы, но вы должны знать предмет до того, как подадите заявление, а не после!


Рейтинг:
19

Maciej Los

Если я вас хорошо понимаю...

Если вы хотите отобразить все филиалы и количество сотрудников, где продажа больше или равна квоте для этого филиала, вам нужно использовать другое соединение.

SELECT B.ID AS BranchNum, COUNT(S.ID) AS EligibleSalesPersonCount
FROM Branch AS B
    LEFT JOIN SalesPerson AS S ON B.BranchID = B.ID  AND S.Sales >= B.Quota
GROUP BY B.ID;


Для получения более подробной информации, пожалуйста, смотрите: Визуальное представление SQL-соединений[^]

Для отображения соответствующих продавцов-персон:
SELECT B.ID AS BranchNum, S.*
FROM Branch AS B
    LEFT JOIN SalesPerson AS S ON B.BranchID = B.ID  AND S.Sales >= B.Quota
GROUP BY B.ID;


Sandeep Mewara

+5 :большой палец вверх:

Maciej Los

Спасибо, Сандип.

Shao Voon Wong

Спасибо Мацей! Ты снова спас мне жизнь!

Maciej Los

Всегда пожалуйста.