I am trying to write a single Postgres query that will result in a table which looks like this:
source |yes_gap|no_gap|
-------|-------|------|
allivet| 29| 25|
amazon | 692| 255|
I've been able to write two separate queries, but haven't been able to figure out how to combine them into one.
Here's my query for product_gap='yes':
select
source,
count(distinct(sku)) as yes_gap
from product_gaps where
product_gap='yes' and
ingestion_date <= '2021-05-25'
/* aggregate by source */
group by source
Result:
source |yes_gap|
-------|-------|
allivet| 29|
amazon | 692|
And here's my query for product_gap='no':
select
source,
count(distinct(sku)) as no_gap
from product_gaps where
product_gap='no' and
ingestion_date <= '2021-05-25'
/* aggregate by source */
group by source
Result:
source |no_gap|
-------|------|
allivet| 25|
amazon | 255|
Can I get both counts in a single query?
Much faster and simpler with conditional aggregates using the aggregate
FILTERclause:See:
Aside 1:
DISTINCTis a key word, not a function. Don't add parentheses for the single column.distinct(sku)is short notation forDISTINCT ROW(sku). It happens to work because Postgres strips the ROW wrapper for a single column, but it's just noise.Aside 2:
product_gapshould probably beboolean.