我正在MySQL数据库上运行查询,以按类别提取加权计数。有两个类别 - 位置和组。这是我正在使用的代码 -
select t.grpnm, a.rcgrp1, ifnull(t.pwgt0,0) as pwgt0
from (
select grpnm,
CASE
WHEN rcgrp = 1 THEN 'r1'
when rcgrp = 2 then 'r2'
when rcgrp = 3 then 'r3'
when rcgrp = 4 then 'r4'
when rcgrp = 5 then 'r5'
ELSE 'r6' END AS rcgrp1,
sum(wgt) as pwgt0
FROM data1
GROUP BY grpnm,rcgrp1 with rollup
)t
right join (
select 'r1' as rcgrp1 union
select 'r2' union
select 'r3' union
select 'r4' union
select 'r5' union
select 'r6'
)a on t.rcgrp1 = a.rcgrp1
union
select grpnm,'total' as rcgrp1,
sum(wgt) as pwgt0
from data1
group by grpnm,rcgrp1 order by grpnm,rcgrp1
你可以在这里看到一个关于SQL小提琴的例子 - http://www.sqlfiddle.com/#!9/24842/13 生成的表缺少Napa(r4)的rcgrp类别之一,因为完整数据集没有'r4'rcgrp类别的任何记录。不幸的是,我无法知道特定数据集是否会丢失rcgrp类别的记录,因此我的代码需要尽可能灵活。
查询是Web查询应用程序的一部分,我需要确保记录计数和记录顺序,以便我的php循环可以按正确的顺序提取和显示正确的数据。
我需要两个方面的帮助:1)为纳帕县添加一个对应于'r4'的行,其值为0,以保持记录计数,同时保留订单; 2)由grpnm总计,因为我需要能够计算我的PHP代码中的百分比。
我已完成搜索,只能找到单类别查询的解决方案(示例:MySQL CASE WHEN THEN empty case values和Selecting rollup after join)。如果有解决方案,任何人都知道随时发布它。
谢谢!