#mysql #sql
Вопрос:
Я пытаюсь сделать запрос, в котором я беру среднее значение значения для этой группы и отмечаю его в столбце Среднее значение для этой группы. Теперь, если для группы на входе есть пробелы, она не должна вычислять среднее значение, а вывод должен быть просто пустым. Как мне это сделать, чтобы даже эти пробелы были обработаны?
Я попробовал это сделать: выберите среднее значение (значение) (раздел по «Группе») из таблицы
Комментарии:
1. Что вы пробовали до сих пор? Как выглядит ваш текущий запрос?
2. выберите среднее значение(значение) по (раздел по «Группе») из таблицы
3. Пожалуйста, приведите Минимальный, воспроизводимый и проверяемый пример вашей проблемы. Примеры данных, ваш запрос, ожидаемые результаты путем редактирования вопроса, а не в качестве комментария к вопросу
4. И как выглядит результат вашего запроса?
5. Это, кажется, не имеет смысла. Вы пытаетесь получить среднее значение по текстовому столбцу? Вы можете рассчитать среднее значение только по числам, поэтому у вас должен быть числовой столбец. Может быть, вы допустили ошибку при создании таблицы?
Ответ №1:
AVG
вычисляет среднее значение набора чисел. Таким образом, в этом столбце не может быть пробелов (пробелов), но NULL
.
AVG
игнорирует все NULL
значения, а это не то, что вы хотите, чтобы это делалось, потому что для набора 2, 4, NULL
вы хотите получить результат NULL
, а не (2 4) / 2 = 2
нет .
Но вы можете проверить, есть ли NULL
в наборе a или нет. Например.:
select
grp,
value,
case when count(value) over(partition by grp) = count(*) over (partition by grp) then
avg(value) over (partition by grp)
else
null
end as average_value
from mytable
order by grp;
Демо: https://dbfiddle.uk/?rdbms=mysql_8.0amp;fiddle=e5783cd10c5d26e1798c2e1b1e022189