Получить количество заказов сотрудников, которые имеют другой счет, чем в одном городе - PullRequest
0 голосов
/ 08 апреля 2020

SQL учеба идет быстрыми темпами. Теперь попрактиковался, где мне нужна помощь.

Я хотел бы получить имена сотрудников, количество заказов которых отличается от количества сотрудников в Нью-Йорке.

Таблицы:

ORDERS, в том числе EMPLOYEE_ID, CITY, ORDER_ID

EMPLOYEES, в том числе LAST_NAME, FIRST_NAME, EMPLOYEE_ID, CITY

Я застрял в этой ситуации:

SELECT ROW_NUMBER() OVER ( ORDER BY COUNT(T.ORDER_ID) DESC) ROW,
(H.LAST_NAME + ', ' + H.FIRST_NAME) 'Employee name',
COUNT(T.ORDER_ID) 'Sold orders', H.CITY 'City'

FROM ORDERS T JOIN EMPLOYEE H ON T.EMPLOYEE_ID = H.EMPLOYEE_ID

GROUP BY H.EMPLOYEE_ID, H.LAST_NAME, H.FIRST_NAME, H.CITY

С этим я можно получить заказы, которые продали сотрудники. К сожалению, это не показывает сотрудников с 0 заказов.

Как я могу показать также сотрудников с 0 заказами? И как я могу показать сотрудников, у которых количество заказов отличается от количества сотрудников в одном городе? Пример сотрудников, чей заказ отличается от обычного в Нью-Йорке.

Надеюсь, вы понимаете, о чем я. Сложная проблема и небольшой языковой барьер.

Пример данных:

First_name    Last_name    Sold_orders    City
John          Doe          2              New York
Jane          Doe          5              Los Angeles
Peter         Pan          5              Miami

Я хотел бы получить сотрудников, которые не имеют такого же количества заказов, чем сотрудники в Майами.

First_name    Last_name    Sold_orders    City
John          Doe          2              New York

Итак, Джейн Доу и Питер Пэн ушли, потому что у них такое же количество заказов, как у сотрудников в Майами (включая сам Майами).

1 Ответ

1 голос
/ 08 апреля 2020

Я думаю, что вы просто хотите left join. Для этого вам нужно начать с таблицы employee, затем принести orders.

select 
    row_number() over ( order by count(o.order_id) desc) rn,
    e.last_name + ', ' + e.first_name employee_name,
    count(o.order_id) sold_orders, 
    e.city
from employee e
left join orders o on o.employee_id = e.employee_id
group by e.employee_id, e.last_name, e.first_name, e.city

Обратите внимание, что я также изменил псевдонимы столбцов: вам следует избегать использования одинарных кавычек. Хотя некоторые базы данных допускают это, одинарные кавычки обычно предназначены для строковых букв, а не для идентификаторов. Базы данных используют разные символы для кавычек идентификаторов (Oracle и Postgres имеют двойные кавычки, MySQL имеет обратные ссылки, SQL Сервер имеет квадратные скобки). Я изменил запрос, чтобы он использовал идентификаторы, которые не требуют кавычек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...