首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >postgresql - sql - `true`值的计数

postgresql - sql - `true`值的计数
EN

Stack Overflow用户
提问于 2011-03-23 03:07:52
回答 10查看 127.8K关注 0票数 123
代码语言:javascript
复制
myCol
------
 true
 true
 true
 false
 false
 null

在上表中,如果我这样做:

代码语言:javascript
复制
select count(*), count(myCol);

我得到了6, 5

我得到5,因为它不计算null条目。

我如何计算真值的数量(在本例中为3)?

(这是一个简化,实际上我在count函数中使用了一个复杂得多的表达式)

编辑摘要:我还想在查询中包含一个普通计数(*),所以不能使用where子句

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-03-23 03:29:26

代码语言:javascript
复制
SELECT COALESCE(sum(CASE WHEN myCol THEN 1 ELSE 0 END),0) FROM <table name>

或者,正如你自己发现的那样:

代码语言:javascript
复制
SELECT count(CASE WHEN myCol THEN 1 END) FROM <table name>
票数 162
EN

Stack Overflow用户

发布于 2016-05-20 05:28:06

从PostgreSQL 9.4开始,就有了FILTER clause,它允许非常简洁的查询来计算真值:

代码语言:javascript
复制
select count(*) filter (where myCol)
from tbl;

上面的查询是一个不好的例子,因为一个简单的WHERE子句就足够了,并且只是为了演示语法。FILTER子句的亮点在于它很容易与其他聚合组合在一起:

代码语言:javascript
复制
select count(*), -- all
       count(myCol), -- non null
       count(*) filter (where myCol) -- true
from tbl;

对于使用另一列作为谓词的列上的聚合,该子句特别方便,同时允许在单个查询中提取不同过滤的聚合:

代码语言:javascript
复制
select count(*),
       sum(otherCol) filter (where myCol)
from tbl;
票数 114
EN

Stack Overflow用户

发布于 2014-01-04 02:08:52

将布尔值转换为整数并求和。

代码语言:javascript
复制
SELECT count(*),sum(myCol::int);

你得到了6,3

票数 101
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5396498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档