0

我有这张桌子:

桌子

对于不同的 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_contentGND.NEWS.INT 的每个分组答案也显示具有相同 var_line 的所有相应 GND_WT 的总和。

例如,如果我有这个:

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

谢谢你的帮助。

4

2 回答 2

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

于 2012-10-25T11:02:25.323 回答
1

此查询可能适合您的具体示例:

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

问候,

路易斯。

于 2012-10-25T13:14:22.097 回答