gpt4 book ai didi

Mysql获取 "sum"和 "group"之后的行位置

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

我需要在total_points上以两种不同的方式获取该表中单个玩家id的位置(2个单独的查询就可以了,除非它可以在1个中完成?)

例如,如果player_id = 1 - 我需要通过两种方式从总分中找出他们的行位置:

  1. 对player_id进行分组并求和(包括所有season_id和guild_id)
  2. 对具有特定 season_id 的player_id 进行分组并求和(包括所有 guild_id)

.

+-----------+-----------+----------+--------------+
| player_id | season_id | guild_id | total_points |
+-----------+-----------+----------+--------------+
| 1 | 1 | 1 | 5 |
| 2 | 1 | 2 | 6 |
| 3 | 2 | 1 | 2 |
....
| 1 | 1 | 2 | 4 |
| 2 | 2 | 2 | 4 |
| 4 | 1 | 3 | 8 |
+-----------+-----------+----------+--------------+

所以在这个例子中,我会说player_id = 1,结果将返回给我位置2,因为他们有第二高的SUM Total_points,在这个例子中是9(玩家2有10)。

在另一个查询中,我需要将结果分组到 season_id 中。 player_id = 1 和 season_id = 1 应该返回位置 1,因为他们有 9,这是赛季内最高的。

稍后我还需要通过 guild_id 来限制它,但我想如果我得到一个使用player_id和season_id有效的查询,我可以弄清楚这一点

任何帮助都会很棒,所以我不必在 PHP 中完成所有这些操作并迭代所有数据库结果,如果可以在 MySQL 中完成,这会浪费资源,因为该表最终将拥有数百万条记录.

谢谢。

最佳答案

我不确定它是否可以更短,但以下查询应该给出您所要求的内容:

SELECT rank
FROM (
SELECT player_id, total_sum, @rank:=@rank+1 AS rank
FROM (
SELECT player_id, SUM(total_points) AS total_sum
FROM players
WHERE season_id=1 -- if you don't want to filter by season, remove this; or add more if you want to filter by other columns
GROUP BY player_id
ORDER BY total_sum DESC) AS sq,
(SELECT @rank:=0) AS tr
) AS q WHERE player_id = 1;
<小时/>

查询说明

在最深的子查询中,您计算​​所需数据的总点数之和:

SELECT player_id,  SUM(total_points) AS total_sum
FROM players
WHERE season_id=1 -- if you don't want to filter by season, remove this; or add more if you want to filter by other columns
GROUP BY player_id
ORDER BY total_sum DESC

您可以省略 WHERE 或添加更多条件。最后一行显示您按总和降序排列,首先给出最高的。

接下来,使用变量@rank使用前面的查询来计算排名:

SELECT player_id, total_sum, @rank:=@rank+1 AS rank 
FROM (
...) AS sq,
(SELECT @rank:=0) AS tr

其初始化方式为:

SELECT @rank:=0

最后,您可以根据这些数据选择您想了解的内容,例如 player_id=1 的排名,如第一个查询中所示。

关于Mysql获取 "sum"和 "group"之后的行位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41024189/

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