gpt4 book ai didi

mysql - 按聚合函数分组以计算行数,将计数映射到用户组

转载 作者:行者123 更新时间:2023-11-30 00:27:52 25 4
gpt4 key购买 nike

对于那些熟悉Minecraft的人来说,我正在尝试计算单个 SELECT 查询中每个用户破坏的每种类型的 block 数。我认为这称为 GROUP BY 聚合函数。我认为我需要使用多个聚合函数来实现我的最终目标。

到目前为止,我只能:

  • 计算每种类型已损坏的 block 的数量
  • 统计每个用户打破的方 block 总数

我认为我需要使用 GROUP BY 函数来计算每个 block 被破坏的次数,然后在子查询中按每个用户进行 GROUP。

<小时/>

问题伪代码:

  • 选择玩家block_id计数(*),其中action_type等于 “打破区 block ”
  • 计算某个 block 被破坏的次数(通过计算每个 block_id 出现的次数)
  • block_id分组

我尝试过的方法: ( output )


选择玩家、block_id、COUNT(block_id)
来自 prism_actions
WHERE action_type = ' block 中断'
按 block ID 分组;

另外:([输出])2

  • 此函数似乎可以计算适当的值。


从 prism_actions 中选择玩家、block_id、count(*) 作为计数,其中 action_type = 'block-break' group by block_id,player order by block_id;

<小时/>

表格 (prism_actions)


字段类型
id int(11) 无符号
action_time 时间戳
Action 类型 varchar(20)
玩家 varchar(16)
世界 varchar(255)
x 整数 (11)
y 小整数(5)
整数 (11)
block_idmediumint(5)
block_subid Mediumint(5)
old_block_idmediumint(5)
old_block_subidmediumint(5)
数据 varchar(255)

<小时/>

我执行了类似的 GROUP BY 聚合查询来计算每个玩家的#(死亡|杀死|破坏的方 block |放置的方 block )

  • 此查询按预期工作,但只需要一个 GROUP BY 函数
  • 根据action_type计算每个 Action 的总和(即玩家杀死、玩家死亡、破坏方 block 、放置方 block
  • 输出如下:


下层(玩家)杀死死亡方 block _ splinter 的方 block _放置
乔伊 41 4 4911 2678
凯特 74 1 4944 4762
账单 129 4 2782 1271
插孔 335 12 12403 5886

代码:
选择较低(玩家),
SUM(CASE WHEN action_type = 'player-kill' THEN 1 ELSE 0 END) AS 击杀,
SUM(CASE WHEN action_type = 'player-death' THEN 1 ELSE 0 END) AS 死亡人数,
SUM(CASE WHEN action_type = 'block-break' THEN 1 ELSE 0 END) ASblocks_broken,
SUM(CASE WHEN action_type = 'block-place' THEN 1 ELSE 0 END) ASblocks_placed
来自 prism_actions
WHERE action_type IN ('block-break', 'block-place', 'player-kill', 'player-death')
AND LOWER(player) NOT IN ('creeper', 'fireball', 'environment') GROUP BY 玩家;

<小时/>

提前谢谢您。

我意识到我在 StackOverflow 上的声望很低,但我希望这不会影响您的回答,或导致任何形式的歧视。

最佳答案

使用此处的 ROLLUP 修饰符即可获得您想要的内容。

SELECT player, block_id, count(*) as count 
from prism_actions
where action_type = 'block-break'
group by player, block_id WITH ROLLUP
order by block_id;

这将给出类似于的记录集

Player | Block | Count
NULL NULL 100
1 NULL 100
1 1 75
1 2 25

其中,player =1 且 block = NULL 是总计,下面是按 block 类型划分的计数。

关于mysql - 按聚合函数分组以计算行数,将计数映射到用户组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22737680/

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