2015-02-02 3 views
1

Это моя первая практика SQL-запросов, и я столкнулся с этой проблемой, когда мне нужно найти среднее количество элементов на складе из дома, которое больше среднего для определенного склада. Все, что я получил, это список склада со средним значением (конкретный склад не включен), и я должен хранить только склад со средним значением, превышающим средний размер этого конкретного склада. Как я могу это решить? Это мой первый опыт обучения SQL. СпасибоСравнение AVG() в SQL

SELECT Warehouse, AVG(QuantityInStocks) AS Average 
FROM SomeTable 
WHERE Warehouse Not In ('Specific_Warehouse') 
GROUP BY Warehouse; 
+3

Просьба представить выборочные данные и ожидаемые результаты. –

+0

Я еще не могу опубликовать изображение. – ln206

+0

Опубликовать его как текст. Перед запуском 'SELECT', нажмите« Результаты в текст »или нажмите« CTRL + T ». Затем скопируйте и вставьте результат. –

ответ

2

Вы должны использовать подзапрос в HAVING предложении:

SELECT Warehouse, AVG(QuantityInStocks) AS Average 
FROM SomeTable 
WHERE Warehouse NOT IN ('Specific_Warehouse') 
GROUP BY Warehouse 
HAVING AVG(QuantityInStocks) > 
    (SELECT AVG(QuantityInStocks) 
    FROM SomeTable 
    WHERE Warehouse IN ('Specific_Warehouse') 
    GROUP BY Warehouse); 
+0

Спасибо, это то, что я ищу. Приятно узнать новое, потому что раньше я не видел предложение HAVING. – ln206

+0

безвозмездная репутация, на самом деле не знаю, что сказать по этому поводу. автор вопроса сказал «Я хочу средний», который может легко получить его без каких-либо '' '' 'и' group by', как [ниже] (http://stackoverflow.com/a/28271591/3208640). в любом случае удачи. – jfun

+1

Подумайте о том, что HAVING как WHERE применяется только к результатам агрегатных функций, таких как COUNT, SUM, AVG и т. Д. – TommCatt

0

относительно того, что вы упомянули в вопросе

«Я должен найти в среднем Количество товаров в складе где-то дома , который больше, чем в среднем конкретного склада "

вы можете использовать NESTED SELECT в WHERE CLAUSE:

SELECT AVG(QuantityInStocks) AS Average 
FROM SomeTable 
WHERE QuantityInStocks > (SELECT AVG(QuantityInStocks) 
          FROM SomeTable) 
+0

Но в предложении WHERE значение QuantityInStocks не является средним? Я прав? Я пытаюсь сравнить среднее значение с какого-либо склада на конкретном складе, если он больше, и он еще его выбросит. – ln206

+0

@ In206, пожалуйста, дайте более подробную информацию, нам нужно знать о структурах таблиц и некоторых данных образца и ожидаемого результата. – jfun