簡體   English   中英

如何在SQL中將一行與其他行進行比較

[英]How to Compare one row with other rows in SQL

我有一個由團隊成員組成的數據集。

我只想計算成員2的平均值。

但是,滿足計算的條件如下:

例如,id 1讓Anna和Sam一起工作,我只想為member2(即Sam)計算

為此,我想對具有

  • 山姆和他一起工作,像id:2 member1:Sam member2:Sam
  • Sam與其他成員(而不是Anna(member1))一起工作,例如id:3 member1:Sam member2:Nihalid:4 member1:Nihal member2:Sam

然后除以不同的#ID

輸入項

+----+---------+---------+-------+
| ID | member1 | member2 | score |
+----+---------+---------+-------+
|  1 | Anna    | Sam     |    10 |
|  2 | Sam     | Sam     |    30 |
|  3 | Sam     | Nihal   |    40 |
|  4 | Nihal   | Sam     |    50 |
|  5 | Sam     | Anna    |    20 |
|  6 | Anna    | Anna    |    60 |
|  7 | Nihal   | May     |    70 |
|  8 | May     | May     |    80 |
+----+---------+---------+-------+

輸出量

+----+---------+---------+-------+-----+
| ID | member1 | member2 | score | AVG |
+----+---------+---------+-------+-----+
|  1 | Anna    | Sam     |    10 |  40 |-->AVG= 30+40+50/3
|  2 | Sam     | Sam     |    30 |  30 |-->AVG= score
|  3 | Sam     | Nihal   |    40 |  70 |-->AVG= 70/1
|  4 | Nihal   | Sam     |    50 |  20 |-->AVG= 30+10+20/3
|  5 | Sam     | Anna    |    20 |  60 |-->AVG= 60/1
|  6 | Anna    | Anna    |    60 |  60 |-->AVG= score
|  7 | Nihal   | May     |    70 |  80 |-->AVG= 80/1
|  8 | May     | May     |    80 |  80 |-->AVG= score
+----+---------+---------+-------+-----+

請嘗試以下操作:

select t1.*,q.avg_score
from yourtable t1
cross apply
(
    select avg(score) as avg_score
    from yourtable t2
    where 
        t1.member2 in (t2.member1,t2.member2)
        and t1.member1 not in  (t2.member1,t2.member2)
)q

暫無
暫無

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

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