如何比较sql中相同条件的两个实例?

如何比较sql中相同条件的两个实例?,sql,Sql,我有以下表格: CREATE TABLE researcher ( rid PRIMARY KEY, name, institution, city, country ) CREATE TABLE paper ( title PRIMARY KEY, journal, volume, number, year ) CREATE TABLE author ( resid FOREIGN KEY REF

我有以下表格:

CREATE TABLE researcher 
(
    rid PRIMARY KEY,
    name,
    institution,
    city,
    country
)

CREATE TABLE paper 
(
    title PRIMARY KEY,
    journal,
    volume,
    number,
    year
)

CREATE TABLE author 
(
    resid FOREIGN KEY REFERENCES researcher.rid,
    title FOREIGN KEY REFERENCES paper.title
)
我需要在SQL查询中列出2019年发表论文比2018年更多的期刊

我试过这个:

SELECT
    journal
FROM
    paper
GROUP BY
    journal
HAVING
    COUNT(title)
WHERE
    year = 2019 > year = 2018

既然我不能有
条件>条件
,我该如何解决这个问题

使用条件表达式

SELECT journal
FROM PAPER
GROUP BY journal
HAVING SUM(CASE WHEN year = 2019 THEN 1 ELSE 0 END) > SUM(CASE WHEN year = 2018 THEN 1 ELSE 0 END);

请记住,在SQL中,
SELECT
语句的逻辑顺序实际上是:

  • 在哪里
  • 分组
  • 拥有
  • 挑选
  • 订购人
  • 考虑到这一点

    步骤1:获取期刊列表以及他们在每个特定年份的论文数量: 步骤2:在外部查询中筛选它: (@GordonLinoff的答案是通过将谓词移动到
    HAVING
    子句,而我更喜欢使用外部查询,从而在单个查询中实现这一点)

    SELECT
        journal,
        [year]
        COUNT( CASE WHEN [year] = 2018 THEN 1 END ) AS PaperCountIn2018,
        COUNT( CASE WHEN [year] = 2019 THEN 1 END ) AS PaperCountIn2019
    FROM
        paper
    GROUP BY
        journal,
        [year]
    
    SELECT
        journalPaperCounts.*
    FROM
        (
            SELECT
                journal,
                [year]
                COUNT( CASE WHEN [year] = 2018 THEN 1 END ) AS PaperCountIn2018,
                COUNT( CASE WHEN [year] = 2019 THEN 1 END ) AS PaperCountIn2019
            FROM
                paper
            GROUP BY
                journal,
                [year]
        ) AS journalPaperCounts
    WHERE
        journalPaperCounts.PaperCountIn2018 > PaperCountIn2019