我在mysql中遇到了我的聚合公式的一些问题。我怀疑错误是因为计算机在排序/排序之前聚合。 有人可以建议一个更好的方法来聚合计数值,或帮助我识别我的代码中的错误? 这是结果表
date hour count aggregate
August, 11 2012 20 1 170
August, 12 2012 19 1 58
August, 13 2012 14 1 44
August, 13 2012 15 1 75
August, 13 2012 21 1 72
August, 13 2012 23 1 80
表格按日期排序,如果两次是在同一天,那么小时。由于聚合函数基于count函数,而count列只填充1,因此聚合列应显示1,2,3,4 ...等 这是我的查询
SELECT t1.original, t1.hour, t1.count, SUM(t2.count) as aggregate
FROM
(SELECT date(FROM_UNIXTIME( timecode)) as day,(hour(FROM_UNIXTIME( timecode))) AS hour,(FROM_UNIXTIME( timecode)) AS original, COUNT(count) as 'count'
FROM sampleData
GROUP BY day, hour
order by original
) t1
INNER JOIN
(SELECT date(FROM_UNIXTIME( timecode)) as day, (hour(FROM_UNIXTIME( timecode) )) AS hour,(FROM_UNIXTIME( timecode)) AS original, COUNT(count) as 'count'
FROM sampleData
GROUP BY day, hour
order by original
) t2
on t1.hour >= t2.hour
GROUP BY t1.hour
ORDER BY t1.original
答案 0 :(得分:0)
您的查询中有两点突出。
首先,连接没有意义,因为它只是在一小时。
我建议将其替换为:
t1.day> t2.day或(t1.day = t2.day和t1.hour> = t2.hour)
其次,你在外部SELECT中有原始和计数,但它们不在group by子句中。我认为更好的做法是在group by子句中使用它们或使用显式聚合函数(在本例中为MIN()或MAX())。这可以防止错误。