首页 > 解决方案 > 如何将两列合并为一列?PostgreSQL

问题描述

我为保龄球联赛运行了一个数据库,每周,我们都会打 2 场保龄球比赛。游戏 1 的分数被放入 game1_score 列,游戏 2 的分数被放入 game2_score 列,我得到这样的输出:

表名:player_scores

season_id|nick_name         |g1_score|g2_score|
---------+------------------+--------+--------+
        2|Axel              |     133|     210|
        2|Benjie B          |      91|     163|
        2|Steveball         |     149|     159|
        2|Shadynasty        |     132|     157|
        2|MatT K            |     122|     151|

我正在寻找一种方法来找到最高分,无论是第 1 场还是第 2 场比赛。我的预期结果是:

season_id|nick_name         |high_game|
---------+------------------+--------+
        2|Axel              |     210|
        2|Benjie B          |     163|
        2|Steveball         |     159|
        2|Shadynasty        |     157|
        2|MatT K            |     151|
        2|Steveball         |     149|
        2|Axel              |     133|
        2|Shadynasty        |     132|
        2|MatT K            |     122|
        2|Benjie B          |      91|

到目前为止,我所能做的就是从第 1 场或第 2 场比赛中获得最大值,例如:

season_id|nick_name         |high_game|
---------+------------------+--------+
        2|Axel              |     210|
        2|Benjie B          |     163|
        2|Steveball         |     159|
        2|Shadynasty        |     157|
        2|MatT K            |     151|

有没有办法做到这一点,或者我应该将所有分数(无论是第 1 场比赛还是第 2 场比赛)插入到同一列中前进?

我正在使用 PostgreSQL 13.3。

我很感激您可以提供的任何帮助和见解,即使是尝试。太感谢了!

标签: sqlpostgresql

解决方案


以下示例对我有用

with highscores as (
                select season_id, nickname, g1_score as high_game 
                from player_scores ps1
                union 
                select season_id, nickname, g2_score as high_game 
                from player_scores ps2
               )
select * from highscores order by high_game desc

推荐阅读