考虑一下查询:
SELECT id, count(id) AS "count" FROM table WHERE id IN ( 'value1', 'value2', 'value3' ) GROUP BY id ORDER BY count ASC;
如果每个IN值都存在于中table,那么我将得到如下结果:
IN
table
RESULTS ------- value1 <value> value2 <value> value3 <value>
但是,如果说不value2存在于table,那么我会得到
value2
RESULTS ------- value1 <value> value3 <value>
注意value2结果中不存在。
我希望value2显示的值为0。
0
对于上下文,我有一个与订阅ID关联的Rep ID表。我想查询这个以获取最少订阅数的销售代表。问题在于此表中的代表ID并不详尽。因此,我以编程方式查询了一个单独的数据源,其中包含Rep ID的详尽列表。我的想法是使用该Rep ID的详尽列表创建查询,以获取我上面提到的所需响应。
有人对此有任何想法吗?我曾在解决方案的使用位置看到过类似的帖子COALESCE,但是我的子查询返回了多个结果,这导致PostgreSQL崩溃。
COALESCE
您可以建立一个列表,您可以使用values()子句将其外部连接到其中:
values()
SELECT d.id, count(t.id) AS "count" FROM ( values ('value1'), ('value2'), ('value3') ) as data (id) left join the_table t on t.id = d.id GROUP BY d.id ORDER BY count ASC;
请注意,您必须使用count(t.id)(对联接表中的值进行计数)来获得计数0
count(t.id)
另外,如果您不想from用values子句弄乱部分,则可以使用公用表表达式:
from
values
with data (id) as ( values ('value1'), ('value2'), ('value3') ) SELECT d.id, count(t.id) AS "count" FROM data d left join the_table t on t.id = d.id GROUP BY d.id ORDER BY count ASC;