我有一个表items
和一个表batches
。一个批可以有n个通过items.batch_id
关联的项。
我想在两组batched
和unbatched
中编写一个查询项计数:
1.项目WHERE batch_id IS NOT NULL(已分批)
1.项目WHERE batch_id IS NULL(未分批)
结果应如下所示
| 分批的|未分批的|
| - -|- -|
| 一百二十万|100个|
感谢您的帮助!
编辑:我被使用X1 M5 N1 X卡住了,结果证明这是一个错误的工作工具。
2条答案
按热度按时间p5fdfcr11#
您可以将
COUNT
与'FILTER(WHERE)一起使用它被称为条件计数
第一个问题
| 匹配的|不匹配的|
| - -|- -|
| 一个|2个|
fiddle
tp5buhyn2#
count()
函数似乎是这里最可能的基本工具。给定一个表达式,它返回该表达式计算为非空的行数。给定参数*
,它计算组中的所有行数。从某种程度上说,这是一个技巧,它可以在同一个结果行中获得批处理和未批处理的计数。至少有三种方法可以做到这一点:
这非常简单。每个子查询都被执行并生成一列结果。因为外部查询中没有给出
FROM
子句,所以将正好有一个结果行。这将在每个结果行上计算整个表的
batched
和unbatched
结果,items
表的每行一个结果行,但实际上只返回一个结果行。(尽管您肯定想测试一下)postgres实际上并不计算limit
子句剔除的所有行的计数。例如,将此选项的性能与前一选项的性能进行比较。count()
搭配filter
子句,如another answer中所详细说明。