sql - 比较 2 列并计算团队在 ORACLE SQL 中获胜的次数
问题描述
我有一张这样的桌子,它已经加入了一些桌子。这是关于篮球比赛的。我想得到一个结果,显示球队名称和比赛次数,以及球队赢了和输了多少场比赛。
游戏表:
game_id - NUMBER<br>
game_date - DATE<br>
location - VARCHAR2<br>
home_teamName - VARCHAR2<br>
away_teamName - VARCHAR2<br>
home_point - NUMBER<br>
away_point - NUMBER<br>
期望的结果:
team_name - VARCHAR2<br>
games - NUMBER<br>
win - NUMBER<br>
lose - NUMBER<br>
像这样:
名称|游戏|赢|输
AAA | 10 | 8 |2
BBB | 9 | 4 |4
CCC | 10 | 6 |5
目前,我设法使用下面的代码获得了每个团队的游戏数量,但我不知道其他的。我也想知道是否可以在不加入表格的情况下获得所有内容。
SELECT T1.NAME, COUNT(T1.NAME) "GAME"
FROM SEE_GAME G
JOIN TEAM T1 ON G.HOME = T1.NAME
RIGHT JOIN TEAM T2 ON G.AWAY = T2.NAME
WHERE "HOME POINT" IS NOT NULL
GROUP BY T1.NAME;
上面代码的结果:
name|GAME
AAA | 10
BBB | 9
CCC | 10
DDD | 10
TEAM 表:
team_id - NUMBER
名称 - VARCHAR2
位置 - VARCHAR2
解决方案
您可以使用UNION
andconditional aggregate
如下:
SELECT TEAMNAME,
SUM(CASE WHEN WON = 'WON' THEN 1 ELSE 0 END) WON,
SUM(CASE WHEN WON = 'LOST' THEN 1 ELSE 0 END) LOST
FROM
(SELECT G.HOME_TEAMNAME AS TEAMNAME,
CASE WHEN G.HOME_POINT > G.AWAY_POINT THEN 'WON' ELSE 'LOST' END AS WON -- THIS IS WINNING CONDITION
FROM SEE_GAME G
UNION ALL
SELECT G.AWAY_TEAMNAME AS TEAMNAME,
CASE WHEN G.AWAY_POINT > G.HOME_POINT THEN 'WON' ELSE 'LOST' END AS WON -- THIS IS WINNING CONDITION
FROM SEE_GAME G)
GROUP BY TEAMNAME;
推荐阅读
- c# - 使用 SpecFlow 对 ADF 管道进行单元测试
- javascript - foreach 外部的变量为空,但其中有一个值
- python - Kivy 矩形源没有更新?
- javascript - 如何以“类似时钟”的方式添加数字?
- linux - E: 无法在 Ubuntu 16.04 上找到包 ros-kinetic-desktop-full
- python-3.x - 熊猫如何获得点击值
- r - 使用 xlsx 包从 R 中导出的文件名中删除空格
- jquery - 如何使用 Jquery contextMenu X2 更新 contextMenu
- javascript - 用 Jest 模拟 Typescript 中导入函数的返回值
- javascript - onDoubleClick() 不适用于手机反应 js 应用程序