【发布时间】:2018-12-27 11:23:19
【问题描述】:
我有一个名为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 人脸类型。
【问题讨论】:
标签: sql postgresql enums group-by count