mySQL:由不同的group-by求和

时间:2016-08-02 13:06:34

标签: mysql group-by aggregate-functions

我有一张桌子: (用x5编辑)

_date(2014-03-05;2014-04-05)
_period(1,2,3,4,5,1,2,3,4,5,1,2; 1,2,3,4,5,1,2,3,4,5)
_id(x1,x1,x1,x1,x1,x2,x2,x2,x2,x2,x3,x3;x4,x4,x4,x4,x4,x5,x5,x5,x5,x5)
_reading(1,1,1,1,1,2,2,2,2,2,5,6;1,1,1,1,1,2,1,1,1,1)
_reading2 (5,5,5,5,5,4,4,4,4,4,7,7;1,1,1,1,1,1,1,1,1,1)

image of the table 1

我需要一个像下面这样的结果,它消除了_id所有没有完整时期1到5的数据,然后计算一天的_read和一天的每个不同_id的_reading2之和:

_date(2014-03-05;2014-04-05)
sum_reading(15;11)
sum_reading2 (9;2)

image of the table2

1 个答案:

答案 0 :(得分:0)

经过测试:SQL Fiddle

我使用子查询来消除没有完整5个句点的_ID。 然后,我按日期和_ID使用组,并使用sum与sum不同来得到总和与总和不同的值。

SELECT A._date, sum(_Reading) as _Reading, 
              sum(Distinct _Reading2) as _Reading2
FROM table A
INNER JOIN (SELECT _ID, _date
            FROM table 
            GROUP BY _ID, _date
            HAVING count(_Period) = 5) B
 on A._ID = B._ID
and A._Date = B._Date
GROUP BY A._Date

这仍然可能无法满足您的需求,因为读数和减少的顺序实际上在阅读中可能很重要2;不只是总结不同。但由于我不清楚要求,这符合预期的结果......这是我现在能做的最好的。

X5的更新 - 通过在内部水平得到不同的总和,我们可以将我认为可以解决问题的读数相加。

SELECT A._date, sum(_Reading) as _Reading, 
              sum(B.I_reading2) as _Reading2
FROM table A
INNER JOIN (SELECT _ID, _date, Sum(Distinct _Reading2) as I_Reading2
            FROM table 
            GROUP BY _ID, _date
            HAVING count(_Period) = 5) B
 on A._ID = B._ID
and A._Date = B._Date
GROUP BY A._Date