gpt4 book ai didi

mysql - sql SELECT 计算来自不同条目的所有点,每个 ID 限制为 10

转载 作者:行者123 更新时间:2023-11-30 22:08:32 25 4
gpt4 key购买 nike

我有一个看起来像这样的表:

  ID    GameID  DateID  Points  Place
-------------------------------------
10 1 1 100 1
11 1 1 90 2
12 1 1 80 3
13 1 1 70 4
14 1 1 60 5
10 1 1 100 1
10 1 1 50 1
10 1 1 100 1
10 1 1 100 1
10 1 1 100 1
10 1 1 100 1
10 1 1 100 1
10 1 1 100 1
10 1 1 100 1
10 1 1 50 5
10 1 1 50 5
12 1 1 100 1
-------------------------------------

我想要一个包含两列的表格,一列是一名球员的总分(总分/积分),另一列是球员的 ID。但是对于一个玩家来说,只能计算十个分数,例如,如果一个玩家玩了 13 次,则只计算十个最高分数。对于上面的示例,我想要一个如下所示的表格:

  ID    totalPoints
-------------------
10 950
11 90
12 180
13 70
14 60
------------------

目前我试过这个:

SELECT ID, 
sum(Points) AS totalPoints
FROM (SELECT Points, ID
FROM Gamer
ORDER BY Points DESC LIMIT 10) AS totalPoints
ORDER BY Points DESC

但它限制每个玩家的参赛作品最多为 10 个,而不是 10 个。

我希望有人能帮助我:)

最佳答案

在所有现有版本中:

DELIMITER $
CREATE FUNCTION `totalPoints`(gamer_id INT) RETURNS int(11)
BEGIN
DECLARE s INT DEFAULT 0;
SELECT SUM(Points) INTO s FROM ( SELECT Points FROM Gamer WHERE ID=gamer_id ORDER BY Points DESC LIMIT 10) sq;
RETURN s;
END$
DELIMITER ;

SELECT DISTINCT ID, totalPoints(ID) FROM Gamer;

MariaDB 10.2(目前为 Beta)的备选方案,它具有窗口函数:

SELECT ID, SUM(Points) FROM ( 
SELECT ID, Points, ROW_NUMBER()
OVER (PARTITION BY ID ORDER BY Points DESC) AS nm
FROM Gamer
) sq WHERE nm <= 10 GROUP BY ID;

我很确定还有其他方法可以做到这一点,我首先想到的是这两种方法。

关于mysql - sql SELECT 计算来自不同条目的所有点,每个 ID 限制为 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40891437/

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