2 вопроса по Northwind SQL
У меня есть 2 вопроса о Northwind
Пример базы данных SQL Server, который я не знаю, как решить
Шоу
CustomerID
для всех клиентов, которые имеют как минимум три разных продукта, но никогда не используют оба продукта в одной категории.Код, который я пробовал для этого вопроса:
SELECT CustomerID, p.ProductID,ProductName, CategoryID FROM (Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID) JOIN Products p ON od.ProductID = p.ProductID
Шоу
CustomerID
для клиентов, у которых есть заказы из всех категорий.
Я застрял на эти вопросы в течение нескольких часов, пожалуйста, помогите, ребята!
Это ссылка для Northwind
Пример базы данных: https://northwinddatabase.codeplex.com/
2 ответа
Решение
Для #2 вы можете использовать что-то вроде этого:
SELECT
c.CustomerID, COUNT(DISTINCT p.CategoryID)
FROM
dbo.Customers c
INNER JOIN
dbo.Orders o ON o.CustomerID = c.CustomerID
INNER JOIN
dbo.[Order Details] od ON od.OrderID = o.OrderID
INNER JOIN
dbo.Products p ON p.ProductID = od.ProductID
GROUP BY
c.CustomerID
HAVING
COUNT(DISTINCT p.CategoryID) = (SELECT COUNT(*) FROM dbo.Categories)
Это работает для вопроса № 1:
SELECT c.CustomerID,
od.productid,
p.ProductName,
COUNT(od.productid),
ct.Category
FROM [Order Details] od
INNER JOIN [dbo].[Products] p on od.ProductID = p.ProductID
INNER JOIN [dbo].[Categories] ct on p.CategoryID = c.CategoryID
INNER JOIN [dbo].[Orders] o on od.OrderID = o.OrderID
INNER JOIN [dbo].[Customers] c on o.CustomerID = c.CustomerID
GROUP BY od.productid,
ct.CategoryID,
p.ProductName,
c.CustomerID
HAVING COUNT(od.productid) > 3
ORDER BY COUNT(od.productid) desc
;