通过一对多关系展平计数

时间:2015-08-06 18:27:58

标签: sql

我有两个表,PersonHobby,有一对多关系。

| ID | Person |     | ID | PersonID | Hobby      |   
|----|--------|     |----|----------|------------|
| 1  | Bob    |     | 1  | 1        | Skiing     |
| 2  | Mike   |     | 2  | 2        | Biking     |  
| 3  | Frank  |     | 3  | 3        | Skiing     |
                    | 4  | 1        | Numerology |
                    | 5  | 2        | Witchcraft |
                    | 6  | 3        | Stamps     |

我想制作一张表,其中包括每个喜欢滑雪或邮票的人的单一计数。 像这样:

| Person | Count |
|--------|-------|
| Bob    | 1     |
| Frank  | 1     |

有效的SQL查询是什么样的?

2 个答案:

答案 0 :(得分:1)

select p.person, count(p.id) as cnt
from person p join hobby h
on h.personid = p.id
where h.hobby = 'Skiing'
group by p.person

您必须加入表格并group by人员ID。

答案 1 :(得分:0)

这解决了它。你需要计算不同的

SELECT p.person, count(Distinct p.id) as Count
FROM person p join hobby h
   ON h.personID = p.ID
WHERE h.hobby = 'Skiing' 
   OR h.hobby = 'Stamps'
GROUP BY p.ID