Как подсчитать повторяющиеся записи в столбце

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть две таблицы:

Поставщик:

  PROV_NO      P_NAME
----------  ---------- 
  P10         ANTEL
  P20         BCORP
  P30         CBIZ
  

Обслуживание:

 S_TYPE  PROV_NO   R_PRICE
------- -------- ---------
  1      P10       160
  2      P10       180
  3      P10       110
  1      P20       190
  2      P20       180
  3      P20       150
  4      P20       240      
  5      P20       195
  1      P30       190
  2      P30       210
  

Я пытаюсь подсчитать количество услуг, предлагаемых каждым поставщиком, и отобразить количество для каждого рядом с именем поставщика. Итак, я хочу, чтобы мой вывод был:

  P_NAME     COUNT
---------  --------
 ANTEL        3
 BCORP        5
 CBIZ         2
  

Моя попытка:

 select provider.p_name, count(distinct service.prov_no)
from provider,service
group by provider.p_name
  

Я попробовал несколько способов, но, похоже, я не могу разделить подсчеты и сделать их уникальными для каждого p_name.

Спасибо.

Ответ №1:

Попробуйте:

 select p.p_name, count(*)
from provider p
join service s on p.prov_no = s.prov_no
group by provider.p_name
  

Измените join на left join , если вы хотите включить поставщиков, у которых нет сервисов.

Ответ №2:

Вам не хватает условия объединения, и вам нужно удалить distinct :

 select provider.p_name, count(*)
from provider,service
where provider.prov_no = service.prov_no
group by provider.p_name
  

Комментарии:

1. Ему также нужно count(*) , а не count(distinct prov_no) — иначе количество всегда будет возвращаться как 1.

Ответ №3:

В вашем запросе должно быть условие объединения

 select provider.p_name, count(distinct service.prov_no) 
from provider join service on provider.prov_no=service.prov_no
group by provider.p_name