#sql #postgresql #count
#sql #postgresql #количество
Вопрос:
Я новичок в POSTGRESQL и пытаюсь получить уникальное количество, где deleted_by is null
для нескольких comp_source_store
значений: [«petsmart», «amazon», «qfc»]
Я могу получить свой номер в полном порядке с помощью одного единственного запроса следующим образом:
select
count(distinct(comp_upc)) as petsmart from matches where
comp_source_store='petsmart'
and deleted_by is null
Возвращает ответ, подобный этому:
productMatches = [ { petsmart: '11562' } ]
Я пытаюсь в конечном итоге заставить свой запрос возвращать ответ со значением int для каждого comp_source_store
, подобного этому:
productMatches = [ { petsmart: '11562' }, { amazon: '231' }, { qfc: '5333' }, ]
Я попытался разделить свой запрос запятой, чтобы получить два уникальных количества, но запрос не будет выполнен и приведет к ошибке, указывающей на символ запятой:
select
count(distinct(comp_upc)) as petsmart from matches where
comp_source_store='petsmart' and deleted_by is null,
count(distinct(comp_upc)) as amazon from matches where
comp_source_store='amazon' and deleted_by is null
Ответ №1:
вы можете использовать group by, чтобы поместить каждое хранилище в строку, например:
select
comp_source_store,
count(distinct(comp_upc)) as comp_upc_count
from matches
where
comp_source_store in ('petsmart', 'amazon', 'qfc')
and deleted_by is null
group by
comp_source_store
Ответ №2:
Используйте условную агрегацию:
select count(distinct comp_upc) filter (where comp_source_store = 'petsmart') as petsmart,
count(distinct comp_upc) filter (where comp_source_store = 'amazon') as amazon,
. . . -- and so on
from matches
where deleted_by is null;
Возможно, вам будет проще поместить результаты в строки:
select comp_source_store, count(distinct comp_upc) as cnt
from matches
where deleted_by is null
group by comp_source_store