【问题标题】:How to return several columns for subquery added to select?如何为添加到选择的子查询返回几列?
【发布时间】:2020-07-02 10:26:11
【问题描述】:

我有一个这样的查询:

select 
   e.field1,
   e.field2,
   (select count(field3) from tbl1 where someField = e.field1 group By someType ) as count_1,
   (select count(field4) from tbl1 where someField = e.field1 group By someType ) as count_2,
from
...

我不喜欢代码重复计数,但如果我这样做的话

select count(field3), count(field3) ....

在子查询中 postgres 抱怨子查询必须返回单列。

如何解决?

【问题讨论】:

    标签: sql postgresql select count subquery


    【解决方案1】:

    您可以使用横向连接:

    select e.field1,  e.field2, t1.*
    from e left join lateral
         (seclect count(tbl1.field3) as count_1, count(tbl1.field4) as count_4
          from tbl1
          where tbl1.someField = e.field1
         ) t1
         on true;
    

    您也可以通过聚合来做到这一点:

    select e.field1,  e.field2, t1.count_1, t1.count_2
    from e left join
         (select tbl1.someField, count(tbl1.field3) as count_1, count(tbl1.field4) as count_2
          from tbl1
          group by tbl1.someField 
         ) t1
         on tbl1.someField = e.field1;
    

    这可能会返回 NULL 值,如果需要,您可以使用 coalesce() 将其转换为 0

    【讨论】:

    • 我需要一个通用查询,它对 postgres 和 oracle 具有相同的语法
    • 甲骨文版本 11
    • @gstackoverflow 。 . .第一个解决方案适用于 Oracle 12C+ 和 Postgres,考虑到您问题上的标签,这似乎是合理的。我添加了一个可以在任何地方使用的替代解决方案。
    • 我最初使用这种方法,但性能很糟糕
    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2021-07-07
    相关资源
    最近更新 更多