考虑查询:
SELECT id, count(id) AS "count"
FROM table
WHERE id IN (
    'value1',
    'value2',
    'value3'
)
GROUP BY id
ORDER BY count ASC;
Run Code Online (Sandbox Code Playgroud)
如果每个IN值都存在table,那么我会得到一个结果:
RESULTS
-------
value1    <value>
value2    <value>
value3    <value>
Run Code Online (Sandbox Code Playgroud)
但是,如果value2没有table,那么我会得到
RESULTS
-------
value1    <value>
value3    <value>
Run Code Online (Sandbox Code Playgroud)
注意value2结果中没有.
我希望value2显示的值为0.
对于上下文,我有一个与订阅ID关联的Rep ID表.我想查询这个以获得具有最少量订阅的Rep.问题是此表中的Rep ID并非详尽无遗.因此,我以编程方式查询包含详尽的Rep ID列表的单独数据源.我的想法是以某种方式使用详尽的Rep ID列表创建一个查询,以获得我上面提到的所需响应.
有没有人对此有任何想法?我已经看过关于这个解决方案使用的类似帖子COALESCE,但我的子查询返回多个结果,这导致PostgreSQL打嗝.
您可以使用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;
Run Code Online (Sandbox Code Playgroud)
请注意,必须使用count(t.id)(计算联接表中的值)才能获得0的计数
或者,如果您不希望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;
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           57 次  |  
        
|   最近记录:  |