簡體   English   中英

SQL行比較查詢

[英]SQL Row Comparison Query

我是SQL新手,並嘗試針對以下結果表編寫查詢,該查詢將使我能夠列出學生Mary得分高於Tom的學科。

    Subject        Student        Teacher        Score
    --------------------------------------------------
    Maths           Tom            Anderson        67
    Maths           Mary           Anderson        68
    English         Tom            Lewis           55
    English         Mary           Lewis           44
    French          Tom            Joubert         87
    French          Mary           Joubert         76
    Geography       Tom            Arnold          76
    Geography       Mary           Arnold          82

結果應為下表:

    Subject     
    ---------
    Maths
    Geography

我相信我應該使用join子句,但無法使其正常工作。

謝謝

假設沒有重復的分數,您實際上可以使用聚合來完成。

select subject
from results
group by subject
having max(case when student = 'Mary' then score end) >
       max(case when student = 'Tom' then score else 0 end);

請注意,這將包括瑪麗得分較高但湯姆沒有得分的主題。

您可以使用自聯接將其概括如下:

SQL小提琴

查詢:

select a.Student As higher, b.Student as lower, a.Subject
  from score a
  join score b   ON a.Student <> b.Student
                AND a.Subject = b.Subject
                AND a.Score > b.Score

結果

| HIGHER | LOWER |   SUBJECT |
|--------|-------|-----------|
|   Mary |   Tom |     Maths |
|    Tom |  Mary |   English |
|    Tom |  Mary |    French |
|   Mary |   Tom | Geography |

然后,顯然,您可以通過添加此WHERE子句來過濾結果。

where a.student ='Mary' AND b.student = 'Tom

該查詢將為您提供所需的結果:

SELECT subject
FROM   scores
WHERE  student = 'Mary'
AND    ( subject
       , score
       ) IN (
            SELECT   subject
            ,        MAX( score )
            FROM     scores
            GROUP BY subject
            );

暫無
暫無

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

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