Присоединиться к операции groupby в SQL

77
8

Я играю с средой SQL W3Schools. Предварительно определенная база данных настроена здесь.

Таблицы, которые будут использоваться: Заказчик и Заказы.

Чтобы получить всю информацию от Клиента, мы можем сделать:

SELECT * FROM [Customers]

Чтобы получить Клиентов, у которых есть только менее 3 заказов, мы делаем:

SELECT CustomerID, count(*) as num_orders FROM [Orders] group by customerID having num_orders<3

Чтобы получить Клиентов у нас в Лондоне, мы делаем:

SELECT * FROM [Customers] where city="London"

Вопрос: Как я могу получить для каждого клиента в Лондоне (с менее чем 3 заказами), сколько заказов у них есть?

Я знаю, что это должно быть левое соединение, так как я хочу, чтобы все клиенты, даже если у них есть заказы N/A (так, никаких записей в "Заказы"), но мне сложно сработать.

Я старался:

SELECT * FROM [Customers] where city="London"
left join (SELECT CustomerID, count(*) as num_orders FROM [Orders] group by customerID having num_orders<3) as data
on customers.CustomerID= data.CustomerID

Но окружающая среда не дает никакой опоздающей информации об ошибке.

спросил(а) 2018-10-04T02:21:00+03:00 1 год, 9 месяцев назад
1
Решение
102

Правильный синтаксис:

SELECT c.*, o.num_orders
FROM [Customers] c LEFT JOIN
(SELECT o.CustomerID, COUNT(*) as num_orders
FROM [Orders] o
GROUP BY o.customerID
) o
ON c.CustomerID = o.CustomerID
WHERE c.city = 'London';

Заметки:

    Важнейшим отличием является порядок статей. WHERE приходит после предложения FROM. Предложение HAVING удаляется, потому что вопрос касается всех клиентов в Лондоне. Одиночные кавычки используются для цитирования Лондона. Одиночные кавычки являются стандартным разделителем строк. Запрос использует псевдонимы таблиц, и они специально выбраны как очень короткие и связаны с именами таблиц. Все столбцы квалифицированы.

ответил(а) 2018-10-04T02:23:00+03:00 1 год, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема