У меня есть таблица с именем users
, в которой есть следующие столбцы:
id: INT NOT NULL
face: face_type
face_type
- это тип ENUM со следующими значениями: 'square'
, 'round'
и 'triangle'
.
И у меня есть еще одна таблица с именем houses
, которая имеет следующие столбцы:
id: INT NOT NULL
user_id: INT NOT NULL
Теперь я хочу сгруппировать все дома по разным типам типов лица.,Итак, что у меня есть, так это:
SELECT users.face_type, COUNT(*)
FROM users
LEFT JOIN houses ON houses.user_id = users.id
GROUP BY users.face_type
Проблема в том, что я также хочу получить строки для face_type
, которых нет ни у одного из пользователей, а также результат для NULL face_type.Так, например, если у меня есть следующие данные:
users (id, face_type)
1, 'round'
2, 'triangle'
houses (id, user_id)
1, 1
2, 1
3, 2
Я ожидаю, что результат будет:
face_type, count
'round' 2
'triangle' 1
'square' 0
null 0
Я знаю, как получить все потенциальные значения face_type
ENUM, выполнив:
SELECT unnest(enum_range(NULL::face_type)) AS face_types;
Но я не знаю, как использовать это для подсчета всех потенциальных типов лиц в совокупности, а также для расчета для типов лиц NULL.