Php 通过'获取另一行组的总和;d行
我有这张桌子: 对于不同的var_线(相当于一行数据或调查对象)和set_代码(不同的调查代码),此选择会重复多次 使用此查询: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
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很抱歉,我粘贴了我的测试表名,您可以使用该更改重新检查