2012-10-25 24 views
0

我有这个表:GET SUM BY'd行

table

这个选择是重复多次为不同var_lines(其中相当多的工作,一行数据,或受访者进行调查)和set_codes(不同的调查代码)。

与此查询:

SELECT 
    *, COUNT(*) AS total 
FROM 
    `data` 
WHERE 
    `var_name` = 'GND.NEWS.INT' 
AND(
    `set_code` = 'BAN11A-GND' 
    OR `set_code` = 'BAN09A-GND' 
    OR `set_code` = 'ALG11A-GND' 
) 
AND `country_id` = '5' 
GROUP BY 
    `data_content`, 
    `set_code` 
ORDER BY 
    `set_code`, 
    `data_content` 

查询基本算个具体问题答案的数目。然后将他们分组调查(set_code)。

我需要的是每个分组的data_content答案GND.NEWS.INT也显示所有相应的GND_WT与相同的var_line的总和。

例如,如果我有这样的:

data_id data_content var_name var_line 
1   2    GND.NEW.INT 1 
2   1.4    GND_WT  1 
3   2    GND.NEW.INT 2 
4   1.6    GND_WT  2 
5   3    GND.NEW.INT 3 
6   0.6    GND_WT  3 

我会得到这样的事情:

data_id data_content var_name  var_line total weight 
1   2    GND.NEW.INT 1   2  3 
5   3    GND.NEW.INT 3   1  0.6 

感谢您的帮助。

回答

2

你的要求是不完全清楚,但我觉得有以下给你想要的东西:

select d1.data_id, 
    d1.data_content, 
    d1.var_name, 
    d1.var_line, 
    t.total, 
    w.weight 
from data d1 
inner join 
(
    select data_content, 
    count(data_content) Total 
    from data 
    group by data_content 
) t 
    on d1.data_content = t.data_content 
inner join 
(
    select var_line, 
    sum(case when var_name = 'GND_WT' then data_content end) weight 
    from data 
    group by var_line 
) w 
    on d1.var_line = w.var_line 
where d1.var_name = 'GND.NEW.INT' 

SQL Fiddle with Demo

+0

嗨,伙计,谢谢你。它有点作品,但它似乎并没有通过data_content(答案)分组,所以我看不到有多少人回答了特定的答案。干杯。 – pocketcup

+0

@pocketcup由data_content字段组成的第一个子查询组,是不是你想要的? – Taryn

+0

是的,但在sqlFiddle中,data_content = 2的行显示为两个单独的行。我需要他们作为1总和和重量SUM'd /加在一起。干杯。 – pocketcup

2

此查询可以是适合你的具体的例子:

select st.data_id, 
    st.data_content, 
    st.var_name, 
    st.var_line, 
    count(st.data_id) as total, 
    sum(st1.data_content) as weight 
from data st 
left join data st1 on st1.var_name = 'GND_WT' AND st1.var_line=st.var_line 
where st.var_name='GND.NEW.INT' 
group by st.data_content 

Regards,

Luis。

+0

嗨路易斯。感谢那。我为我的表名更改了stackover1,但它只是在navicat中永远运行而没有结果。 – pocketcup

+0

@pocketcup对不起,我粘贴了我的测试表名称,您可以重新检查该更改 – QuarK

+0

@pocketcup您可以在此处测试该查询:http://sqlfiddle.com/#!2/a0ecd/32 – QuarK