从每50行中选择5个值的总和,并按总和进行分组

时间:2016-05-18 09:43:05

标签: mysql

我试图通过从每50行抓取5个值并将它们加在一起来对其进行采样来分析一些数据。

数据看起来像这样 -

Col 1
    177
    177
    177
    177
    174
    174
    174
    166
    166
    166
    166
    170
    170
    170
    170
    171
    171
    171
    171
    174
    174
    174
    174
    168
    168
    168
    168
    172
    172
    172
    172
    172
    171
    171
    171
    171
    171
    171
    171
    170
    170
    170
    170
    170
    171
    171
    171
    174
    174
    174
    174
    171
    171
    171
    171
    169
    169
    169
    169
    169
    171
    171
    171
    172
    172
    172
    172
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    171
    172
    172
    172
    172
    170
    170
    170
    170
    171

我可以通过使用UNION来管理它,但它看起来非常混乱,并且想知道是否有任何好的解决方案可以做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用MySQL User-Defined Variables获取行号和组号。此查询返回每个50的5个值的总和。我已经添加了ID来归档这些值,您应该使用ORDER BY您的身份归档到订单值。

SELECT GroupID, 
       SUM(Col1) as SumOfCol1 
FROM
(
 SELECT T.*,
       @counter := IF(@counter>=50,1,@counter + 1) as counter,
       @GroupID := IF(@counter=1,@GroupId + 1,@GroupId) as GroupID
 FROM T, 
     (SELECT @counter :=0,@GroupID := 0) r
 ORDER BY ID  
) T1 
WHERE Counter<=5
GROUP BY GroupID

SQL fiddle demo

答案 1 :(得分:-2)

select sum(data) from
(
select distinct data from table limit 0,50;
union
select distinct data from table limit 50,50;
union
select distinct data from table limit 100,50;
union
select distinct data from table limit 150,50;
)temp;

这将从子查询中获取给定限制的不同数据。 主要查询总结了它。