PHP / SQL - 获取另一列的总和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP / SQL - 获取另一列的总和相关的知识,希望对你有一定的参考价值。
我的mysql数据库中有两个表。一个叫做球员,另一个叫做世界。每个玩家都有一个“级别”和一个“世界”列。我想要实现的是根据表格播放器的列值填充表格世界中的列。我想首先得到那个世界的球员总数以及他们的平均水平。
我的表看起来像这样:
表:球员
+-------+-------+--------+----------+-------+--------------+---------+--------+
| id | name | sex | vocation | level | achievements | world | online |
+-------+-------+--------+----------+-------+--------------+---------+--------+
| 24471 | John | Male | None | 92 | 3 | Antica | 1 |
| 24493 | Bob | Male | None | 76 | 19 | Amera | 0 |
| 24535 | Sam | Male | None | 75 | 0 | Antica | 0 |
| 24574 | Sarah | Female | None | 78 | 23 | Beneva | 1 |
| 24673 | Carl | Male | None | 75 | 10 | Belobra | 1 |
+-------+-------+--------+----------+-------+--------------+---------+--------+
表:世界
+----+---------+---------+--------+--------+----------+---------------+--------------+
| id | name | players | online | avglvl | totalexp | location | pvp |
+----+---------+---------+--------+--------+----------+---------------+--------------+
| 1 | Amera | 0 | 0 | 0 | 0 | North America | Open PvP |
| 2 | Antica | 0 | 0 | 0 | 0 | Europe | Open PvP |
| 3 | Astera | 0 | 0 | 0 | 0 | North America | Optional PvP |
| 4 | Belobra | 0 | 0 | 0 | 0 | South America | Optional PvP |
| 5 | Beneva | 0 | 0 | 0 | 0 | Europe | Optional PvP |
+----+---------+---------+--------+--------+----------+---------------+--------------+
例如,我们可以看到球员约翰和萨姆拥有世界的安提卡。因此,Antica在表格世界中的播放器列下应该具有值“2”。但只有John在Antica上线。因此,世界Antica在“world”表中的“online”列下应该具有值“1”。等等。我也想要他们在那个世界的平均水平。
如何通过SQL查询来实现这一点?
首先,我需要获得所有世界名称(我认为?)并循环遍历它们。然后获取每个世界的以下详细信息:
- 玩家数量
- 在线金额
- 平均水平金额
然后使用这些值更新到worlds表中。
答案
您可以将数据汇总为:
select world, count(*) as players, sum(online) as online, avg(level) as avglevel
from players
group by world;
你可以把它加入到update
中:
update worlds w join
(select world, count(*) as players, sum(online) as online, avg(level) as avglevel
from players
group by world
) p
on w.world = p.world
set w.players = p.player,
w.online = p.online,
w.avglevel = p.avglevel;
我不认为像这样保持一个单独的表是一个好主意。毕竟,您可以随时查询players
以获取此信息。这两个系统也很快就会过时,因此数据不一致。您可以通过使用触发器来解决这个问题,但这会增加系统的复杂性。通常,简单的查询就足够了。
以上是关于PHP / SQL - 获取另一列的总和的主要内容,如果未能解决你的问题,请参考以下文章