gpt4 book ai didi

MySQL:选择具有相同名称的所有行,然后更新除最高值之外的所有行的另一列?

转载 作者:行者123 更新时间:2023-11-29 22:54:05 24 4
gpt4 key购买 nike

我遇到了一个问题,无法将各个部分组合在一起。

所讨论的表格包含游戏的在线高分,并且随着人们的目标更高,游戏中的高分列表一次又一次地被相同的名字所饱和。我想做的是只为每个名字保留一个分数,以便更多用户可以在最高分数中看到他们的名字(或者更确切地说,将除最高分数之外的所有分数乘以 -1,所以我保留数据但负分数不会被加载)。

流程是:

  1. 从名称列中选择所有相同的名称
  2. 通过将分数乘以 -1 来更新 highscore 不是第一个选择中的最大值的位置。
  3. 对所有不同的名称重复此操作。

我尚未找到解决方案的关键问题是一一选择名称,而无需输入每个名称,然后更新选择中除最高分之外的所有名称。

任何帮助将不胜感激!谢谢,时间文件系统

最佳答案

假设您的表格如下所示:

------------------------------------
| player_name | date | score |
------------------------------------
| Max | 01-03-2015 | 100 |
| Daniel | 27-02-2015 | 150 |
| Max | 24-02-2015 | 200 |
| Daniel | 26-02-2015 | 100 |
------------------------------------

您可以使用包含 GROUP BYANY 谓词执行 SELECT 语句,以获得每个组的最高分,在此case 是玩家,以及该得分的日期。

SELECT 
player_name, date, score AS "max_score"
FROM
highscores t1
WHERE
(t1.player_name, t1.score) = ANY(SELECT t2.player_name, max(t2.score) FROM highscores t2 GROUP BY t2.player_name);

这应该给你以下结果:

----------------------------------------
| player_name | date | max_score |
----------------------------------------
| Daniel | 27-02-2015 | 150 |
| Max | 24-02-2015 | 200 |
----------------------------------------

请注意,如果您只想获取玩家名称和 MAX(score),则可以使用 ANY 表达式中包含的简单 GROUP BY 子查询。但是,由于您还需要日期,因此这将不起作用,因为 SQL 无法知道要包含组中的哪个日期。根据 SQL 标准,SELECT 可能只包含 GROUP BY (player_name) 中提到的列或基于聚合函数的表达式。因此,您不能在简单的 GROUP BY 查询中包含日期并希望得到您想要的结果。

关于MySQL:选择具有相同名称的所有行,然后更新除最高值之外的所有行的另一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com