簡體   English   中英

如何比較sql中相同條件的兩個實例?

[英]How to compare two instances of the same condition in 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 ,我該如何解決這個問題?

使用條件表達式。 . .

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. 通過...分組
  3. 選擇
  4. 訂購者

考慮到這一點...

第 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM