Sql об обработке заготовок

#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