I have a query like this:
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 ...
I don’t like code duplication for counts but if I do smth like
select count(field3), count(field3) ....
in subquery postgres complains that subquery must return single column.
How to fix it ?
Advertisement
Answer
You can use a lateral join:
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;
You can also do this with aggregation:
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;
This could return NULL
values, which you can convert to 0
if desired using coalesce()
.