gpt4 book ai didi

MySQL SUM 多个列和组的前 n 个值

转载 作者:行者123 更新时间:2023-11-30 22:24:20 26 4
gpt4 key购买 nike

我有一个 MySQL 表,其中包含多个类别(p1、p2 等)的玩家点数和玩家 ID (pid)。

我有一个查询,计算每个类别的点数总和,将它们作为别名并按玩家 ID (pid) 对它们进行分组。

   SELECT *, 
SUM(p1) as p1,
SUM(p2) as p2,
SUM(p3) as p3,
SUM(p4) as p4,
SUM(p6) as p6,
SUM(p13) as p13,
SUM(p14) as p14,
SUM(p15) as p15,
SUM(p16) as p16,
SUM(p17) as p17,
SUM(p18) as p18,
SUM(p19) as p19,
SUM(p20) as p20,
SUM(p21) as p21
FROM results GROUP BY pid

此外,我执行 while 循环并使用这些别名值更新其他表。

现在我只需要计算每个组的前 5 个或 12 个(取决于类别)值。我不知道从哪里开始。我发现了类似的问题,但没有一个解决将值放入别名的问题,因此我不必更改更多代码。

谁能帮我写一个至少两个类别的示例查询,这样我就可以正确理解这样做的原则?

提前致谢!

最佳答案

因为我们需要对前 n 条记录求和,所以我们需要使用这样的东西:

SELECT pid, sum(p1)
FROM (SELECT p.*,
(@pn := if(@p = pid, @pn + 1,
if(@p := pid, 1, 1)
)
) as seqnum
FROM player p CROSS JOIN
(SELECT @p := 0, @pn := 0) as p1
ORDER BY pid, p1 DESC
) p
WHERE seqnum <= 1
GROUP BY pid;

这里,我们可以修改seqnum <= 1根据所需记录数的条件。例如。如果我们想要 5 条记录,那么我们需要写 seqnum <= 5 .

请注意,这只会计算特定字段的前 n 个总和。如果我们想要多个字段,那么我们可能需要重复查询。

Here是可以使用的 SQL Fiddle 示例。

关于MySQL SUM 多个列和组的前 n 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35723426/

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