postgresql получает уникальное количество для нескольких значений

#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