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 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 中,SELECT
语句的逻辑顺序实际上是(通常):
- 从
- 在哪里
- 通过...分组
- 拥有
- 选择
- 订购方式
考虑到这一点...
第 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
推荐阅读
- ggplot2 - Getting the zoom ratio in ggsave with transparent background
- spring-boot - Netbeans 11,如何从 Springboot 应用程序生成战争文件
- excel - 需要比较两列并用一张表中的数据完成第三列
- javascript - 请帮助我在 javascript 中构建 reg ex
- node.js - 如何获取服务器的成员数?
- api - 无法访问在应用程序脚本中制作的 API 内容
- python - 如果 GridSearchCV 给出了一些排名为 1 的估计器,它将选择哪一个作为最佳估计器?
- javascript - React 的视差效果
- oracle - 安装oracle数据库速成版报错/u01/app/oracle/product/11.2.0/xe/bin/nls_lang.sh: No such file or directory
- matlab - 如何每 100 个值找到一行的前 10 个值?