#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