总订单

时间:2012-08-14 21:59:27

标签: mysql aggregate

我在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

1 个答案:

答案 0 :(得分:0)

您的查询中有两点突出。

首先,连接没有意义,因为它只是在一小时。

我建议将其替换为:

t1.day> t2.day或(t1.day = t2.day和t1.hour> = t2.hour)

其次,你在外部SELECT中有原始和计数,但它们不在group by子句中。我认为更好的做法是在group by子句中使用它们或使用显式聚合函数(在本例中为MIN()或MAX())。这可以防止错误。