【发布时间】:2012-04-12 04:23:27
【问题描述】:
我有一个包含多个字段的产品表,其中包含用户对各种属性的评价:
product | attr_1_eval | attr_2_eval | attr_3_eval
ABC | Correct | Incorrect | Null
DEF | Incorrect | Null | Null
XYZ | Undetermined | Null | Incorrect
123 | Null | Undetermined | Correct
456 | Incorrect | Correct | Correct
我需要编写一个查询来汇总所有产品的属性评估(不为空):
evaluation | correct | incorrect | undetermined
attr_1 | 1 | 2 | 1
attr_2 | 1 | 1 | 1
attr_3 | 2 | 1 | 0
这条 SQL 让我走到了这一步:
SELECT
SUM(CASE WHEN attr_1_eval = 'Correct' then 1 else 0 END) AS correct,
SUM(CASE WHEN attr_1_eval = 'Incorrect' then 1 else 0 END) AS incorrect,
SUM(CASE WHEN attr_1_eval = 'Undetermined' then 1 else 0 END) AS undetermined,
SUM(CASE WHEN attr_2_eval = 'Correct' then 1 else 0 END) AS correct,
...
FROM product
但它不会将 attr_1, attr_2.. 按列中包含错误计数的行分组(如上面所需的结果集)。我正在使用 Postgres,但欢迎任何形式的 SQL 提供帮助。
【问题讨论】:
标签: sql postgresql group-by sum case