首页 > 解决方案 > 想要从 ORACLE SQL 中的 2 个单独列中为一个团队提供平均点

问题描述

游戏表:

GAME_ID - NUMBER    
GAME_DATE - DATE
ARENA - VARCHAR2(20)
HOME - VARCHAR2(30)
AWAY - VARCHAR2(30)
"HOME POINT" - NUMBER
"AWAY POINT" - NUMBER

HOME 和 AWAY 标识球队名称。“HOME POINT”和“AWAY POINT”对应于这些列。例如(仅以 4 列表示),我想获得一支球队的平均分。考虑下面的示例,我想获得 AAA、BBB、CCC 和 DDD 团队的 AVG 积分。

AAA
BBB
90 <- got by AAA
100 <- got by BBB
------------------------
AAA
CCC
99 <- got by AAA
82 <- got by CCC
------------------------
AAA 
DDD
100 <- got by AAA
78 <- got by CCC

我尝试了下面的代码,但没有得到理想的结果:

SELECT HOME, SUM("HOME POINT") + SUM("AWAY POINT") / COUNT(*)
FROM GAME 
GROUP BY HOME

标签: sqloraclegroup-byaverage

解决方案


取消透视数据并聚合一种方法使用union all

select team, avg(points)
from ((select home as team, home_points as points from games) union all
      (select away as team, away_points as points from games)
     ) t
group by team;

在 Oracle 12C+ 中,我建议使用横向连接而不是union all.


推荐阅读