Столбец «Products.ProductName» недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY. - PullRequest
0 голосов
/ 31 марта 2020

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

Столбец «Products.ProductName» недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY

Select  P.ProductName , C.City , Sum(OD.Quantity )as TotalSold,
    DENSE_RANK() OVER ( PARTITION BY C.CITY  ORDER BY OD.Quantity  Desc) as rank
from Products P
Inner Join  [Order Details] OD on P.ProductID = OD.ProductID
Inner Join Orders O on O.OrderID = OD.OrderID
Inner Join Customers C on C.CustomerID = O.CustomerID
where country = 'USA'

Но если использовать приведенный ниже запрос, он даст мне правильные данные. какая разница между этими двумя, если я объединяю все 4 таблицы в разном порядке?

select p.productName, c.city, od.quantity,
    DENSE_RANK () OVER ( Partition by C.city Order by od.quantity Desc) as rank
from customers C
Inner Join Orders O on C.customerID = O.CustomerID
Inner Join [Order Details] od on O.OrderID = OD.OrderID
Inner Join Products P on OD.ProductID = P.ProductID
where country = 'USA'

1 Ответ

0 голосов
/ 31 марта 2020

Два запроса (не пытаются) делать одно и то же.

Рабочий запрос (второй) объединяется и использует оконную функцию для сортировки строк, имеющих одинаковый city, по убыванию quantity).

Второй запрос - это попытка сгруппировать строки productName и city и отсортировать товары в каждом городе по их общим продажам. Чтобы сделать этот запрос действительным, вам нужно добавить предложение GROUP BY и изменить ORDER BY функции окна:

select  P.ProductName , C.City , Sum(OD.Quantity) as TotalSold,
    DENSE_RANK() OVER ( PARTITION BY C.CITY  ORDER BY Sum(OD.Quantity) Desc) as rank
from Products P
inner Join  [Order Details] OD on P.ProductID = OD.ProductID
inner Join Orders O on O.OrderID = OD.OrderID
inner Join Customers C on C.CustomerID = O.CustomerID
where country = 'USA'
group by P.ProductName, C.City
...