Как я могу сгруппировать по следующему подзапросу sql - PullRequest
0 голосов
/ 04 августа 2020

Как я могу сгруппировать по следующему запросу:

Основной запрос должен возвращать три столбца: State, City и средний порядок для каждого города. Для этого вы можете сгруппировать набор результатов по столбцам State и City. Наконец, отсортируйте результаты по штатам, а затем по городу в возрастающей последовательности.

   SELECT a.State, a.City, avgOrder = (SELECT AVG(o2.OrderID) 
        FROM Orders AS o2 WHERE o2.CustomerID = a.CustomerID)
   FROM Addresses AS a INNER JOIN Orders AS o ON o.CustomerID = a.CustomerID
   ORDER BY a.State ASC

Порядок таблиц:

   [OrderID],
  ,[CustomerID]
  ,[OrderDate]
  ,[ShipAmount]
  ,[TaxAmount]
  ,[ShipDate]
  ,[ShipAddressID]
  ,[CardType]
  ,[CardNumber]
  ,[CardExpires]
  ,[BillingAddressID]

Адреса таблиц:

   [AddressID]
  ,[CustomerID]
  ,[Line1]
  ,[Line2]
  ,[City]
  ,[State]
  ,[ZipCode]
  ,[Phone]
  ,[Disabled]

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Вероятно, вы хотели написать такой запрос:

SELECT 
    a.State, 
    a.City, 
    (
        SELECT AVG(o.??) 
        FROM Orders o WHERE o.CustomerID = a.CustomerID
    ) as avgOrder
FROM Addresses a
ORDER BY a.State, a.City

Неясно, какой столбец вы хотите усреднить в таблице orders (но, скорее всего, это не oderid): я представил его как вопросительные знаки в запросе.

Но это не соответствует требованию, описывающему соединение и агрегирование. Это будет:

SELECT 
    a.State, 
    a.City, 
    AVG(o.??) avgOrder
FROM Addresses a
INNER JOIN Orders o ON o.CustomerID = a.CustomerID
GROUP BY a.State, a.City
ORDER BY a.State, a.City
1 голос
/ 04 августа 2020

Предположительно, вам нужен средний размер заказа на город, но нет никаких указаний на его размер. В противном случае запрос выглядит как JOIN с агрегацией - и ваша попытка более сложна и отсутствует GROUP BY:

SELECT a.State, a.City, AVG(o.<size column>) as avgOrder
FROM Orders o JOIN 
     Addresses a 
     ON o.CustomerID = a.CustomerID)
GROUP BY a.state, a.city
ORDER BY a.State ASC
...