sql - 想要从 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
解决方案
取消透视数据并聚合一种方法使用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
.
推荐阅读
- r - 合并具有拼写错误变量的重复行
- swift - 在 Sirikit IntentHandler 中无法访问单例
- php - 通过 PHP 调用 WCF SOAP Web 服务时出错
- powershell - 在“Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force”之后恢复 PowerShell
- javascript - 延迟加载错误组件不是 ngmodule
- fullcalendar - FullCalendar - 使用资源组和日期更改 x 和 y 轴
- algorithm - 城市之间是否存在路径
- javascript - 子菜单的问题
- c# - 在类中使用 StreamReader/StreamWriter
- python - PyOpenGL 相机系统