2015-05-15 1 views
-3

Я хочу использовать среднее значение() с случае, однако моя команда ниже, кажется, дает мне ошибку, но я не могу понять, почемумогу показаться, чтобы получить AVG(), чтобы работать с футляром в SQL

SELECT 
avg(case when price between 0 AND 9 then price end), 
avg(case when price between 10 AND 19 then price end), 
avg(case when price between 20 AND 29 then price end), 
avg(case when price between 30 AND 39 then price end), 
avg(case when price between 40 AND 49 then price end) 
FROM products; 

база данных выглядит примерно так:

ProductID ProductName     Price 
1   Chais       18 
2   Chang       19 
3   Aniseed Syrup     33 
8   Northwoods Cranberry Sauce  40 
9   Mishi Kobe Niku     97 
+2

не стесняться. Включите ошибку в свой вопрос. Кроме того, пометьте свой вопрос базой данных, которую вы фактически используете. SQL Server? Или SQLite? –

+0

Что такое «случай»? – BugInTheCode

+0

Представленный вами запрос выглядит хорошо для меня, и он работает без ошибок для меня в темах, которые вы отметили (SQL Server и SQLite), а также в последних версиях MySQL, Oracle и PostgreSQL. В каждом случае он возвращает значение '34' для среднего значения, которое является правильным для данных и запроса. Если вы получаете сообщение об ошибке, то это вряд ли будет связано с запросом и данными, которые вы представили. –

ответ

2

Может быть, вам нужно что-то вроде этого:

select avg (price) from products where price > 30 
+1

Не то же самое. В среднем 40 и 10 будет составлять 40 не 20. – Paparazzi

+0

, что является средним из цен, которые составляют более 30, поэтому 40 верны; если вам нужно всего лишь среднее количество всех элементов, удалите предложение where. –

+1

Среднее количество элементов> 30 не является заявленным вопросом. avg (случай, когда цена> 30, а затем цена else 0 end) – Paparazzi