首页 > 解决方案 > 比较 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

标签: sqloracleif-statementcase

解决方案


您可以使用UNIONandconditional 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;

推荐阅读