繁体   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