Php 通过'获取另一行组的总和;d行

Php 通过'获取另一行组的总和;d行,php,mysql,group-by,sum,Php,Mysql,Group By,Sum,我有这张桌子: 对于不同的var_线(相当于一行数据或调查对象)和set_代码(不同的调查代码),此选择会重复多次 使用此查询: 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-GN

我有这张桌子:

对于不同的var_线(相当于一行数据或调查对象)和set_代码(不同的调查代码),此选择会重复多次

使用此查询:

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`
查询基本上统计特定问题的答案数。然后将它们分组(设置_代码)

我需要的是,GND.NEWS.INT的每个分组的
data\u内容
answers也显示具有相同var\u行的所有对应GND\u 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

谢谢您的帮助。

您的要求并不十分明确,但我认为以下内容满足了您的要求:

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'

请参见

您的要求并不十分明确,但我认为以下内容满足了您的要求:

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'

请参见

此查询适用于您的特定示例:

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
问候,


Luis.

此查询适用于您的特定示例:

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
问候,


路易斯。

嗨,伙计,谢谢你。这是可行的,但它似乎没有按数据内容(答案)进行分组,所以我看不出有多少人回答了这个具体的答案。干杯。@pocketcup数据内容字段的第一个子查询组,这不是您想要的吗?是的,但在SQLFIDLE中,数据内容=2的行显示为两个单独的行。我需要它们作为1,加上总数和重量之和。干杯。@pocketcup如果有两个,你想要哪个结果?您必须决定要返回哪一个。@pocketcup如果您只想返回第一个,那么您可以将结果包装在子查询中--请参阅此演示--嗨,伙计,谢谢。这是可行的,但它似乎没有按数据内容(答案)进行分组,所以我看不出有多少人回答了这个具体的答案。干杯。@pocketcup数据内容字段的第一个子查询组,这不是您想要的吗?是的,但在SQLFIDLE中,数据内容=2的行显示为两个单独的行。我需要它们作为1,加上总数和重量之和。干杯。@pocketcup如果有两个,你想要哪个结果?您必须决定要返回哪一个。@pocketcup如果您只想返回第一个,那么您可以将结果包装在子查询中--请参阅此演示--嗨,Luis。谢谢你。我更改了stackover1作为我的表名,但它只是在navicat中永远运行,没有结果。@pocketcup抱歉,我粘贴了我的测试表名,您可以使用该更改重新检查Hi Luis。谢谢你。我更改了stackover1作为我的表名,但它只是在navicat中永远运行,没有结果。@pocketcup很抱歉,我粘贴了我的测试表名,您可以使用该更改重新检查