MySQL - 选择查询空案例值 - 多个类别

时间:2016-03-25 21:36:57

标签: mysql

我正在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 valuesSelecting rollup after join)。如果有解决方案,任何人都知道随时发布它。

谢谢!

0 个答案:

没有答案