首页 > 解决方案 > 如何比较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 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

既然我不能拥有condition > condition,我该如何解决这个问题?

标签: sql

解决方案


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

  1. 在哪里
  2. 通过...分组
  3. 拥有
  4. 选择
  5. 订购方式

考虑到这一点...

第 1 步:获取期刊列表以及它们在每个特定年份的论文数量:

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]

第 2 步:在外部查询中对其进行过滤:

(@GordonLinoff 的答案通过将谓词移动到HAVING子句在单个查询中完成,而我更喜欢使用外部查询)。

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

推荐阅读