交叉汇总没有收集正确的总计

时间:2017-06-07 00:20:22

标签: mysql sql crosstab

我有一个关于我在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

我遇到的问题是关于“总计”行的汇总和&柱。这就是发生的事情。

http://imgur.com/a/cEzfm

在“总计”列的最后一个单元格中,所有内容都应计算最多38个&行。我尝试用charaid替换CASE语句中的equipid列,这是我的结果:

http://imgur.com/a/5lIyF

在“总计”列(这是我想要的结果)中没有重复计算,直到最后一行(总计),数学变得完全错误。

我确定我需要编辑“总计”列的CASE语句,但此时我很难过。关于如何获得38的任何建议?

0 个答案:

没有答案