在postgresql中,统计表格列中某个值出现的次数

8

我有一个包含多列的表格:

table1 | column1 | column2 | column3 |
       |    x    |  ....   |   ....  |
       |    y    |  ....   |   ....  |
       |    x    |  ....   |   ....  |

如何统计一个值(例如x)在一列中(例如column1)出现的次数?针对table1,这将返回2(column1中存在x的数量)。


你应该真的找一份SQL教程。这是基础信息,对于PostgreSQL来说并没有什么不同。 - Ken White
2个回答

22

您可以使用带有CASE语句的SUM()聚合函数,例如:

select sum(case when column1 = 'x' then 1 else 0 end) as X_Count
from tabl1;

这个比内置函数count()更快吗? - Victor Turrisi
@VictorTurrisi,它应该并且必须给你与count()相同的性能。它只是解决同样问题的不同方式。 - Rahul
如果表的大小很大,并且column1上有索引,那么使用WHERE条件可能会带来巨大的优势,因为它只会访问与条件匹配的列(实际上,对于这种简单情况,可能根本不会访问表,从而满足索引的答案),而你在返回集中的逻辑将每次强制进行全表扫描。 - reedstrm
2
这也很好,因为它让您可以在同一列中多次计算值(例如,在该列中计算x的出现次数、y的出现次数等),答案不错! - Timmeh
1
使用sum的优点是,您可以在一个select中计算多个总和,而count则计算select的所有结果。 - ceving
count(*) 相比,另一个优点是您将获得明确的 0,用于未满足所有条件的组,而不是将该组从结果中省略。例如,select gcol, count(*) from tbl where wcol = 'foo' group by gcol 不会有任何行,其中 wcol 不是 'foo',而 select sum(case when wcol = 'foo' then 1 else 0 end) from tbl group by gcol 将为所有不同的 gcol 值提供一行。可能很明显...但我最终来到这里,因为我想要 0,而 count 没有给我。 - pyansharp

6
SELECT COUNT(*) FROM table1 WHERE column1 = 'x'

我对SQL/PostgreSQL很新。谢谢,伙计! - Victor Turrisi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接