我有一个关于我在MySQL上运行的交叉表查询的快速问题。我正在尝试列出设备的各个部分以及视频游戏中每个角色(标记为Z,S,F,A)的设备总数以及每件角色的总人数。
我正在加入两个表,其中包括:
设备(id,equip,price,shopid)
charaequipchart(charaid,equipid,abilityid)
然而,我遇到了一些问题,因为角色可以穿多件装备,而且一些装备可以戴在多个角色上。我使用DISTINCT来管理它。这是我在CASE语句中使用DISTINCT编写的查询。
SELECT CASE WHEN EQID is null
THEN 'Total'
ELSE Equip END as 'Equip', Z, S, F, A, Total
FROM
(select equipment.id as 'EQID', equipment.equip as 'Equip',
count(distinct case when chae.charaid = 1 then chae.equipid
end) as 'Z',
count(distinct case when chae.charaid = 3 then chae.equipid
end) as 'S',
count(distinct case when chae.charaid = 5 then chae.equipid
end) as 'F',
count(distinct case when chae.charaid = 8 then chae.equipid
end) as 'A',
count(chae.equipid) as 'Total'
from equipment
join charaequipchart as chae
on equipment.id = chae.equipid
group by EQID with rollup) as ch
我遇到的问题是关于“总计”行的汇总和&柱。这就是发生的事情。
在“总计”列的最后一个单元格中,所有内容都应计算最多38个&行。我尝试用charaid替换CASE语句中的equipid列,这是我的结果:
在“总计”列(这是我想要的结果)中没有重复计算,直到最后一行(总计),数学变得完全错误。
我确定我需要编辑“总计”列的CASE语句,但此时我很难过。关于如何获得38的任何建议?