sql - 如何从不同的连接级别中选择两个不同的计数?

时间:2012-10-25 10:02:12

标签: sql sql-server

我不确定标题是否正确我的问题,我最好举个例子。

我有三个表:PublicationJournalPublished。他们的专栏如下:

    **Publication table**

       pub_id,     journal_id

    **Journal table**

       journal_id,   article_id

    **Published table**

       article_id

所以如果我这样做

    select pub.pub_id, count(j.article_id) 

    from publication pub

    inner join journal j on pub.journal_id=j.journal_id

    group by pub.pub_id

我得到了每个total number of articles需要发布的期刊的pub_id,对吗?

如果我这样做

    select pub.pub_id, count(p.article_id) 

    from publication pub

    inner join journal j on pub.journal_id=j.journal_id

    inner join published p on j.article_id=p.article_id

    group by pub.pub_id

我得到了每个total number of published articles需要发布的期刊的pub_id,对吗?

通过上述两个查询,我可以获得the number of articles that need to be publishedthe number of articles that have been published

我的问题是如何编写单个查询以同时获取这两个数字?

我需要在同一张表中显示这两个数字。

P.S:我正在使用Microsoft SQL Server

2 个答案:

答案 0 :(得分:0)

尝试

select pub.pub_id, count(p.article_id), count(distinct j.article_id) 
from publication pub
inner join journal j on pub.journal_id=j.journal_id
left join published p on j.article_id=p.article_id
group by pub.pub_id

答案 1 :(得分:0)

您可以使用count(distinct ...)只计算一次日记帐,尽管通过添加join添加了额外的行。这样您就可以left join published表:

select pub.pub_id, count(distinct j.journal_id), count(p.article_id)
from publication pub
inner join journal j on pub.journal_id=j.journal_id
left join published p on j.article_id=p.article_id
group by pub.pub_id