@galliard

Как в PostgreSql гриппировать по признаку null/not_null?

Есть значит некое поле columnName, которое может содержать либо NULL, либо какую-то произвольную строку. Если написать обычный "GROUP BY columnName", то выборка сгруппируется по каждому значению columnName, которые там почти уникальны и смысла в такой группировки нет. Мне бы хотелось разделить выборку на 2 части: ту, где значение поля NULL и ту, где любое другое значение. Возможно ли это?
  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Увидел 3 ответа, ну думаю, элементарно, ответили уже. Но зачем так сложно?
group by field_name is null
всё. Группировка по выражению, зачем его делать строкой в подзапросе или числом? bool самого по себе более чем достаточно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
shurshur
@shurshur
Сисадмин, просто сисадмин...
select count(*),is_null from (
  select case when columnName is null then 'null' else 'not null' end as is_null
    from tableName
) t group by is_null;
Ответ написан
@anikavoi
select group_id, name
from members
where group_id in (
select group_id
from members
group by 1
having bool_and(name is not null)
);

SELECT department, COUNT(*) as “Num of employees” , AVG(salary) as “Avg Dept. Salary”
FROM employee
GROUP BY department
ORDER BY department NULLS LAST;
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Просто группировать по выражению
group by case when my_field is null then 0 else 1 end
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы