选择3个表上的计数

时间:2017-11-30 08:46:13

标签: sql select join count

我需要你对3张桌子上特定SELECT的帮助。我对SQL不熟练所以对我来说这是一个很难SELECT,因为我必须将COUNT(我猜)应用于查询。

我告诉你我的桌子:enter image description here

我需要知道数据库中有多少联系人(所有联系人!!!!)以及有多少照片视频必然会有任何联系。

我应该得到与此类似的结果:

-----------------------------------
| ID | NAME       | PHOTO | VIDEO |
-----------------------------------
| 1  | MARK       | 3     | 1     |
-----------------------------------
| ID | LISA       | 2     | 0     |
-----------------------------------

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法,如果您对查询中的重复项犹豫不决,可以使用sql函数并将type参数作为字符串传递。如果您有不确定的类型数量(视频,照片,文本等),您需要重新设计输出表格式(我会使用以下元组TYPE,CONTACT_ID,COUNT),或者在最坏的情况下使用动态查询构造。< / p>

select c.ID, c.NAME, 
(select count(*) from CONTACT_MEDIA cm join MEDIA m on 
m.ID = cm.ID_MEDIA and m.TYPE = 'PHOTO' where cm.ID_CONTACT = c.ID) as PHOTO, 
(select count(*) from CONTACT_MEDIA cm join MEDIA m on 
m.ID = cm.ID_MEDIA and m.TYPE = 'VIDEO' where cm.ID_CONTACT = c.ID) as VIDEO
from CONTACT c

答案 1 :(得分:1)

请使用以下查询,这将为您提供准确的结果

select contact_media.ID_Contact, contact.Name, count(M1.ID) as 'PHOTO', COUNT(M2.ID) as 'VIDEO' from Contact inner join contact_media on Contact.ID=contact_media.ID_Contact
left outer join media M1 on contact_media.ID_Media=M1.ID and M1.TYPE='PHOTO'
left outer join media M2 on contact_media.ID_Media=M2.ID and M2.TYPE='VIDEO'
 group by contact_media.ID_Contact, contact.Name