我有以下模式(sqlite):
- JournalArticle(articleID, title, journal, volume, year, month)
- ConferenceArticle(articleID, title, conference, year, location)
- 人物(姓名、单位)
- 作者(姓名,文章编号)
我正在尝试获取从 2000 年到 2018 年(含)期间每年的 session 文章数量 >= 期刊文章数量的所有作者的姓名。如果一位作者在一年内在每个类别中有 0 篇文章,那么该条件仍然成立。唯一重要的年份是 2000-2018
如果跨越所有年份,查询会容易得多,因为我可以统计期刊文章和 session 文章并进行比较,然后得到名称。但是,我在尝试检查 2000-2018 年的每一年时遇到了困难。
我当然不想这么多年重复查询。我觉得我可能需要按年分组,但我不确定。 到目前为止,我已经能够将 2000-2018 年这两种类型的所有文章作为一张大表获取,但我不确定下一步该做什么。:
select articleID, year
from JournalArticle
where year >= 2000 and year <= 2018
union
select articleID, year
from ConferenceArticle
where year >= 2000 and year <= 2018
最佳答案
嗯。让我们从计算每个作者和年份开始:
select a.name, year, sum(is_journal), sum(is_conference)
from ((select ja.article_id, ja.year, 1 as is_journal, 0 as is_conference
from journalarticle ja
) union all
(select ca.article_id, ca.year, 0 as is_journal, 1 as is_conference
from conferencearticle ca
)
) jc join
authors a
on a.article_id = jc.article_id
group by a.name, jc.year
现在,您可以再次聚合以匹配符合条件的年份:
select ay.name
from (select a.name, year, sum(is_journal) as num_journal, sum(is_conference) as num_conference
from ((select ja.article_id, ja.year, 1 as is_journal, 0 as is_conference
from journalarticle ja
) union all
(select ca.article_id, ca.year, 0 as is_journal, 1 as is_conference
from conferencearticle ca
)
) jc join
authors a
on a.article_id = jc.article_id
group by a.name, jc.year
) ay
where (jc.year >= 2000 and jc.year <= 2018) and
num_journal >= num_conference
group by ay.name;
关于多次sqlite查询对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52919071/