【问题标题】:grouping by in postgres在 postgres 中分组
【发布时间】:2020-06-22 08:35:32
【问题描述】:

在我的数据库中有一个名为game_id的列,我想根据game_id对其他值求和。但是我有一个问题,我有 game_id 1999 和 game_id 19999 它们的值不同但它是同一个游戏。我正在寻找如何将这两个 game_id 组合在一起的解决方案。

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果 - 都是格式化文本,而不是图像。在开始之前看看minimal reproducible example
  • 你怎么知道你是同一个游戏?

标签: sql postgresql group-by


【解决方案1】:

您可以将该值更改为所需的值,以使您的 groupby 语句按您的意愿工作。

UPDATE table_name
SET game_id = 1999
WHERE game_id = 19999;

【讨论】:

  • 问题是表行多,每分钟加一次,无法更新每一个API调用
  • SQL 本身在解决您描述的问题方面的能力有限。您有 2 个主要选项来解决此问题: 1. SQL 方法是在每个涉及 game_id 作为 groupby 语句等相关因素的查询之前使用我上面提到的代码。 2. Web 开发可以通过将游戏 id '19999' 重新定义为 '1999' 来解决这个问题,这样问题就会消失。
  • 还有另一种方法可以解决这个问题,但我认为它比仅使用更新表方法效率低。您可以使用 CASE 语句创建一个包含每个游戏的 game_id 的新列,并将每个 19999 的 game_id 预定义为 1999。同样,此解决方案效率不高,似乎是解决此问题的最佳方法问题是通过后端工程。如果您无权访问 DB 架构,那么我提到的第一个 SQL 解决方案肯定可以完成这项工作。
【解决方案2】:

你可以使用 case when 和 temp table

IF EXISTS(SELECT [name] FROM tempdb.sys.tables WHERE [name] like '#LocalTempTablo%') 
BEGIN
   DROP TABLE #LocalTempTablo;
END;

CREATE TABLE #LocalTempTablo
(
    game_id int, 
    sumexample int
)

INSERT INTO #LocalTempTablo SELECT CASE WHEN game_id=1999 or game_id=19999 THEN 1999 ELSE 1999 END, SUM(sumexample) FROM games WHERE game_id=1999 or game_id=19999
GROUP BY game_id

SELECT game_id, SUM(sumexample) FROM #LocalTempTablo
GROUP BY game_id

【讨论】:

    【解决方案3】:

    如果这些是需要组合的特定游戏,您可以使用case 表达式:

    select (case when game_id = 19999 then 1999 else game_id end) as imputed_game_id,
           sum(score)  -- or whatever
    from t
    group by imputed_game_id;
    

    您也可以使用替换表来处理这个问题——也许直接内置在查询中:

    select coalesce(v.new_game_id, t.game_id) as imputed_game_id,
           . . .
    from t left join
         (values (19999, 1999)
         ) v(game_id, new_game_id)
         on t.game_id = v.game_id
    group by imputed_game_id;
    

    这对于替换多个game_ids 很方便。

    【讨论】:

      猜你喜欢
      • 2015-02-06
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2016-09-05
      • 2021-12-30
      • 2019-10-31
      相关资源
      最近更新 更多