【发布时间】:2015-05-15 05:12:19
【问题描述】:
创建计算表中数据出现次数的列的最佳方法是什么?表格需要按一列分组吗?
我的数据库是 PostgreSQL。
我见过:
SELECT
sum(CASE WHEN question1 = 0 THEN 1 ELSE 0 END) AS ZERO,
sum(CASE WHEN question1 = 1 THEN 1 ELSE 0 END) AS ONE,
sum(CASE WHEN question1 = 2 THEN 1 ELSE 0 END) AS TWO,
category
FROM reviews
GROUP BY category
其中question1 的值可以是0、1 或2。
我还看到了一个使用count(CASE WHEN question1 = 0 THEN 1)的版本
但是,随着question1 的可能值数量的增加,这将变得更加繁琐。有没有一种方便的方法来编写这个查询,可能会优化性能?
【问题讨论】:
-
您的版本相当合理,但如果您希望它在语法上正确,您应该包含
end。另一种方法是 Postgres 的crosstab功能。我不知道哪个性能更好。 -
对不起,忘记输入结尾
-
为什么不按类别和问题1分组并按组计算行数?
-
@GiorgiNakeuri OP 想要 question1 的每个值的列名,然后您需要将结果转置为所需的结果。
-
@Ram,啊哈,好吧,我知道了。在 MSSQL 中,它将按类别和问题分组,然后旋转分组结果。
标签: sql postgresql count group-by aggregate-filter