PostgreSQL 在表中跟踪投票?

发布于 2024-10-21 11:47:34 字数 234 浏览 2 评论 0原文

我有一个带有简单的向上/向下投票列的表,我最初将其创建为布尔值。 true 表示赞成,false 表示反对。但是,我不确定如何使用聚合函数来实现这种查询结果。例如,5 个 true 行和 2 个 false 应该等于 +3 票。

我想我需要将该列更改为带有+1和-1的smallint。这是正确的吗?有没有更好的方法来查询这样的东西?

I have a table with a simple up/down vote column which I originally created as a boolean. true is a vote up, false is a vote down. However, I'm not sure how to use aggregate functions to achieve this kind of query result. For example, 5 true rows and 2 false should equal a vote of +3.

I'm thinking that I need to change the column to a smallint with +1 and -1. Is this correct? Is there a better way to query something like this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

和影子一齐双人舞 2024-10-28 11:47:34

无需更改数据类型,只需使用 CASE 将其转换为 -1 和 1,然后对表达式求和:

SELECT sum(case when vote_column then 1 else -1 end)
FROM your_table

要正确处理 NULL 值,请使用以下代码

SELECT sum(case vote_column 
              when true then 1 
              when false then -1 
              else 0 
           end)
FROM your_table

No need to change the datatype, simply use a CASE to convert it to -1 and 1, then sum over the expression:

SELECT sum(case when vote_column then 1 else -1 end)
FROM your_table

To properly deal with NULL values, use the following

SELECT sum(case vote_column 
              when true then 1 
              when false then -1 
              else 0 
           end)
FROM your_table
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文