仅返回特定值的PostreSQL
我有以下结构:仅返回特定值的PostreSQL,sql,postgresql,Sql,Postgresql,我有以下结构: sample\u表 code | delivery | end_date | type ---------------+----------------+--------------+------ C086000-T10001 | OK | 2014-11-12 | 01 C086000-T10001 | OK | 2014-11-11 | 03 C086000-T10002 | FA
sample\u表
code | delivery | end_date | type
---------------+----------------+--------------+------
C086000-T10001 | OK | 2014-11-12 | 01
C086000-T10001 | OK | 2014-11-11 | 03
C086000-T10002 | FALSE | 2014-12-10 | 03
C086000-T10002 | FALSE | 2014-01-04 | 03
C086000-T10003 | FALSE | 2014-02-28 | 03
C086000-T10003 | FALSE | 2014-11-12 | 01
C086000-T10003 | FALSE | 2014-08-20 | 01
我想输出有多少代码(计数)处于OK delivery状态。
我试着做一些事情,比如:
SELECT sample_table.code AS code, sample_table.delivery AS delivered
FROM sample_table
WHERE COUNT(sample_table.delivery = "OK")
GROUP BY code, delivered
编辑
预期输出如下所示
code | delivered | all_type |
---------------+----------------+--------------+
C086000-T10001 | 2 | 04 |
C086000-T10002 | 0 | 06 |
C086000-T10003 | 0 | 05 |
试试这个:
SELECT count(*)
FROM sample_table
WHERE sample_table.delivery = "OK"
如果您需要代码:
SELECT code, count(*)
FROM sample_table
WHERE sample_table.delivery = "OK"
group by code
使用条件聚合:
SELECT code,
SUM(CASE WHEN delivery = 'OK' THEN 1 ELSE 0 END ) AS delivered,
SUM(type) all_type
FROM sample_table
GROUP BY code
在Postgres中,
filter()
子句可以方便地实现以下功能:
select
code,
count(*) filter(where delivery = 'OK') delivered,
sum(type) all_type
from sample_table
group by code
你的预期产量是多少?嗨,吴先生,对于代码T10001,您不必为2014-11-12的结束日期交付预期结果,因为对于代码T10001,样本表中只有一行的结束日期为2014-11-12。您如何决定在列
end\u date
中显示哪个值?为什么代码C086000-T10003
的结果集中没有记录?@GMB my错误,更新过滤器非常方便,谢谢!如何将此代码修改为仅对代码
具有交付=正常
的类型进行计数?因此,在输出中,对于C086000-T10002
和C086000-T10003
和04
第一个代码-C086000-T10001
?@mr_muscle:这将是sum(type)过滤器(其中delivery='OK')