使用计数
问题描述:
我有两个表如下定义连接两个表:使用计数
EMAILS
ID SUBJECT BODY
1 Test1 blah blah
2 Test2 blah blah blah
3 Test3 more blah
ATTACHMENTS
ID EMAIL_ID ATTACHMENT NAME
1 2 TEST.DOC
2 2 TEST.XLS
我试图执行一个选择取回所有电子邮件和多少附件的计数(如有的话)在这些电子邮件表的每一行 - 最好是在一个单一的查询,其中的结果将类似于这样的:
EMAIL_ID SUBJECT NUM_ATTACHMENTS BODY
1 Test1 0 blah blah
2 Test2 2 blah blah blah
3 Test3 0 more blah
我用尽了一切办法,但“正道”,如果任何人有几分钟的时间来帮我创建正确的SQL来构建这个,我非常感谢它。谢谢。
答
我喜欢brydgesk's solution,但不希望在可能的情况下不使用子查询。
如果给定电子邮件没有附件,则此查询将显示0。
SELECT
a.email_id,
e.subject,
e.body,
COALESCE(count(a.id),0) AS NUM_ATTACHMENTS
FROM
emails e
LEFT OUTER JOIN attachments a
ON e.id = a.email_id
GROUP BY
a.email_id, e.subject, e.body
答
你有没有尝试过这样的事情? (未经测试)
SELECT
e.id,
e.subject,
count(*),
e.body
FROM
(SELECT *
FROM emails e
JOIN attachments a
ON e.id = a.email_id)
GROUP BY e.id, e.subject, e.body
答
你可以这样做,因为SELECT子句中的一个简单的子查询:
Select E.ID As EMAIL_ID
, E.SUBJECT
, (Select Count(*)
From ATTACHMENTS As A
Where A.EMAIL_ID = E.ID) As NUM_ATTACHMENTS
, E.BODY
From EMAILS As E
那一个钉它。非常感激。 – Dave 2010-05-04 00:31:44
@Dave:很高兴你能工作。我已经忘记将你的问题记录为有用和清晰,但现在已经这样做了。干杯。 – bernie 2010-05-04 00:34:40
顺便说一句,感谢您向我展示COALESCE功能。 TBH,我从来没有见过:(但是,现在我可以看到在这种情况下它有多么的有用, – Dave 2010-05-04 01:01:20