У меня две таблицы:
Заказчики:
id FirstName LastName Age City
----------------------------------------
1 Joey Blue 40 Goddard
2 Barry Bonds 50 Gaddard
3 Mike Schmidt 60 KC
4 Steve Jones 45 New York
Заказы :
OrderId OrderDate CustomerID ProductID
-----------------------------------------------------
1 2019-08-06 12:10:02.270 1 1
2 2019-08-06 12:10:33.690 2 1
3 2019-08-06 12:10:44.970 2 2
4 2019-08-06 12:10:51.910 1 1
5 2019-08-06 12:10:52.210 1 1
6 2019-08-06 12:10:52.657 1 1
7 2019-08-06 12:10:53.067 1 1
8 2019-08-06 12:11:17.340 2 1
9 2019-08-06 12:11:23.963 2 2
10 2019-08-06 12:11:32.063 3 2
11 2019-08-06 12:11:38.503 3 1
12 2019-08-06 12:11:38.790 3 1
15 2019-08-17 19:51:45.070 2 1
16 2019-08-17 19:52:14.207 2 2
17 2019-08-17 19:52:14.540 2 2
18 2019-08-17 19:52:14.923 2 2
19 2019-08-17 19:52:31.240 1 2
20 2019-08-17 19:52:37.363 1 2
21 2019-08-17 19:52:38.860 1 2
22 2019-08-17 19:52:39.213 1 2
23 2019-08-17 19:52:39.613 1 2
24 2019-08-17 19:52:39.997 1 2
25 2019-08-17 19:52:40.360 1 2
Я пытаюсь вернуть имя и номер заказа любого клиента для тех, у кого от 4 до 8 заказов.
Я могу присоединиться к столам и посчитать количество заказов, используя:
SELECT
Cu.FirstName, COUNT(Od.CustomerID) AS 'Customer Orders'
FROM
Customer AS Cu
INNER JOIN
Orders AS Od ON Cu.id = Od.CustomerID
GROUP BY
Od.CustomerID, Cu.FirstName
ORDER BY
[Customer Orders] DESC
Который возвращает результат:
FirstName Customer Orders
----------------------------
Joey 12
Barry 8
Mike 3
Но я не могу заставить МЕЖДУ работать только возвращаться (поэтому я получаю только тех клиентов, у которых от 4 до 8 заказов (поэтому мой желаемый результат будет :)
FirstName Customer Orders
---------------------------------
Barry 8
2 ответа
Вы можете использовать для фильтрации результат функции агрегации
SELECT Cu.FirstName,COUNT(Od.CustomerID) as 'Customer Orders'
from Customer as Cu
inner join Orders as Od on Cu.id=Od.CustomerID
GROUP BY Od.CustomerID, Cu.FirstName
HAVING COUNT(Od.CustomerID) between 4 and 8
ORDER BY [Customer Orders] DESC
Просто используйте HAVING
предложение:
SELECT Cu.FirstName,COUNT(Od.CustomerID) as 'Customer Orders'
FROM Customer as Cu
INNER JOIN Orders as Od on Cu.id=Od.CustomerID
GROUP BY Od.CustomerID, Cu.FirstName
HAVING COUNT(Od.CustomerID) between 4 and 8
ORDER BY [Customer Orders] DESC
Постскриптум Мы пока не знаем вашу СУБД. Для некоторых баз данных (таких как MySQL) SQL допускается использование псевдонимов в предложениях, таких как HAVING Customer_Orders between 4 and 8
для COUNT(Od.CustomerID) as Customer_Orders
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.