SQL количество продуктов, купленных по крайней мере 5 уникальными клиентами - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть база данных со следующими объектами:

  • Цена ( prodID , от, цена)
  • Продукт ( prodID ,имя, количество)
  • PO ( prodID, orderID , сумма)
  • Заказ ( orderID , дата, адрес, статус, номер отслеживания, custID,shipID)
  • Доставка ( shipID , компания, время, цена)
  • Заказчик ( custID , имя)
  • Адрес ( addrID , custID, адрес)

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

SELECT Product.name, COUNT(DISTINCT custId) as cust_count
FROM Product P
INNER JOIN PO
ON PO.prodId = P.prodId
INNER JOIN "Order" O
ON O.orderId = PO.orderId
INNER JOIN Customer C
ON C.custId = O.custId
HAVING COUNT(DISTINCT custId) > 4;

Я получаю следующие ошибки:

Не удалось связать многоэлементный идентификатор "Product.name" "Неоднозначное имя столбца 'custID'

Ответы [ 2 ]

2 голосов
/ 11 ноября 2019

Вам нужен GROUP BY - и использовать псевдонимы таблицы:

SELECT p.name, COUNT(DISTINCT o.custId) as cust_count
FROM Product P INNER JOIN
     PO
     ON PO.prodId = P.prodId INNER JOIN
     "Order" O
     ON O.orderId = PO.orderId
GROUP BY p.name
HAVING COUNT(DISTINCT o.custId) > 4;

Обратите внимание, что от JOIN до Customer не требуется, поскольку идентификатор находится в таблице Order.

0 голосов
/ 11 ноября 2019

Вы также пытаетесь это сделать. Я надеюсь, что это решит вашу проблему

ВЫБЕРИТЕ DISTINCT TOP (5) o.custId, p.name ОТ заказа O INNER JOIN PO ON PO.orderID = O.orderID INNER JOINПродукт P ON P.prodID = PO.prodID

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