多次sqlite查询对比

标签 sql database sqlite

我有以下模式(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/

相关文章:

c - 终止长时间运行的进程

python - 如何检查 2 个数据库是否打开或关闭(一个在 sqlite3 中,另一个在 MySQL 中)- Python 3.3?

sqlite - Xamarin Forms UWP Sqlite 连接,无法加载文件或程序集 SQLite-net

mysql - 需要帮助在此 MySQL 查询中放置 LIMIT,OFFSET

PHP 在我的购物车上每页只显示 2 件商品

sql - 复杂的结果分布数据库查询

mysql - 无法仅恢复 mariadb 中的数据?

c++ - inNull(sqlite3_stmt *, int col) 是否有一个 bool 允许我检查它?

sql - 如何从 SQL 查询设置变量?

mysql - 这个自左连接返回的记录比我预期的要多