2011-06-01 6 views
4

je les deux tableaux suivants:requêtes SQL - Distinct résultats

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

(OwnerID est une clé étrangère d'identité)

Je voudrais que la base de données à la liste chaque personne et combien espèces différentes ils possèdent. Par exemple, si Bob (ID 1473) était propriétaire d'un chien, un chat et un chien de la sortie doit être:

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

Je me rends compte que cela nécessiterait une corrélation des sous-requêtes ou jointures externes, mais je ne suis pas exactement sûr comment faire ça. Toute aide serait appréciée.

Répondre

1

Vous pouvez utiliser count(distinct ...) pour que:

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

* '... à la liste ** ** chaque personne ...' * –

+0

@Andriy M: Ce être 'gauche rejoindre 'je suppose :) – Andomar

+0

Ouais, c'est ce que je pensais. Mais le PO semble avoir été d'accord avec votre choix à la place. :) –

1

essayer cette

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

Mais «count (*)» comptera le nombre d'animaux de compagnie, pas le nombre d'espèces? – Andomar

1
select people.name, count(distinct pet.species) 
from people, pet 
where people.id = pet.ownerid 
group by people.name