SQL-запрос - отличные результаты - PullRequest
4 голосов
/ 01 июня 2011

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

People [*ID*, Name] 
Pet [*PetID*, OwnerID, Species, Name]

(OwnerID - это внешний ключ идентификатора)

Я бы хотел, чтобы база данных перечисляла каждого человека и сколько различных видов им принадлежит. Например, если Боб (ID 1473) владел собакой, кошкой и другой собакой, результат должен быть:

ID    | No. of Species
----------------------
1473  | 2

Я понимаю, что для этого потребуются коррелированные подзапросы или внешние объединения, но я не совсем уверен, как это сделать. Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 01 июня 2011

попробуйте

Select ID,[No. of Species] from People 
inner join 
  ( select Count(Species) as [No. of Species],OwnerID from Pet  
   group by OwnerID) d 
on Id = d.OwnerID
1 голос
/ 01 июня 2011
select people.name, count(distinct pet.species)
from people, pet
where people.id = pet.ownerid
group by people.name
1 голос
/ 01 июня 2011

Вы можете использовать count(distinct ...) для этого:

select  People.ID
,       count(distinct Species)
from    People
join    Pet
on      Pet.OwnerID = People.ID
group by
        People.ID
...