#sql #postgresql #group-by
Вопрос:
У меня есть следующая таблица
customer_id | cust_name | city | grade | salesman_id
------------- ---------------- ------------ ------- -------------
3002 | Nick Rimando | New York | 100 | 5001
3007 | Brad Davis | New York | 200 | 5001
3005 | Graham Zusi | California | 200 | 5002
Я хочу получить среднюю оценку города Нью-Йорк, в котором я пытался выполнить свой запрос.
SELECT Avg(grade),city from customer Group BY city Having city ='New York' ;
Но я понял это.
Avg | City |
------------- ----------------
0000 | New York |
Что можно исправить для моего запроса?
Комментарии:
1. Что такое тип данных
grade
? Среднее значение числового типа, дающее0
результат, обычно не содержит 4 цифр. (Кроме того, это показывает, что я не могу воспроизвести вашу проблему, как описано: dbfiddle.uk/… )2. Как вы выполняете запрос? Возможно, значение каким-то образом усекается.
3. Работает просто отлично (хотя я думаю, что вы на самом деле хотите
where city = ...
, а не ИМЕТЬ4. Моя ошибка, я использовал сброшенные данные, и у класса был числовой тип данных с точностью только до 3.
5. Просто для того, чтобы прояснить для тех, кто найдет это: НАЛИЧИЕ предназначено для ограничения набора результатов столбцами результатов, которые являются агрегированными вычислениями (например,
HAVING AVG(grade) > 100
). Используйте ГДЕ для столбцов результатов, которые являются данными, а не вычислениями.
Ответ №1:
В вашем запросе нет ничего плохого.
Я только что протестировал его в своей базе данных со следующей таблицей:
------------- ----------- -------
| customer_id | city | grade |
------------- ----------- -------
| 1 | New York | 200 |
| 2 | New York | 300 |
| 3 | Barcelona | 400 |
------------- ----------- -------
Запрос SELECT city, Avg(grade) FROM customer GROUP BY city;
возвращает:
----------- ------------
| city | Avg(grade) |
----------- ------------
| Barcelona | 400.0000 |
| New York | 250.0000 |
----------- ------------
И запрос SELECT city, Avg(grade) FROM customer GROUP BY city HAVING city='New York';
возвращает:
---------- ------------
| city | Avg(grade) |
---------- ------------
| New York | 250.0000 |
---------- ------------
Возможно, у вас неверный тип столбца «Оценка». Убедитесь, что это номер.
Также вы можете использовать WHERE
вместо HAVING
:
SELECT city, Avg(grade) FROM customer WHERE city='New York';
Комментарии:
1. Это должен быть комментарий, а не ответ. Пожалуйста, удалите этот ответ и вместо этого прокомментируйте вопрос.