Mysql 总订单

Mysql 总订单,mysql,aggregate,Mysql,Aggregate,我在mysql中的聚合公式遇到了一些问题。我怀疑错误是因为计算机在排序/排序之前正在聚合。 有人可以建议一种更好的方法来聚合计数值,或者帮助我识别代码中的错误吗? 这是结果表 date hour count aggregate August, 11 2012 20 1 170 August, 12 2012 19 1 58 August, 13

我在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列仅用1s填充,因此聚合列应该显示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

在你的问题中有两件事很突出

首先,加入没有意义,因为它只在小时

我建议将其替换为:

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


其次,在外部SELECT中有original和count,但它们不在GROUPBY子句中。我认为最好将它们放在GROUPBY子句中,或者使用显式聚合函数(在本例中是MIN()或MAX())。这可以防止出现错误。

在您的查询中有两件事很突出

首先,加入没有意义,因为它只在小时

我建议将其替换为:

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


其次,在外部SELECT中有original和count,但它们不在GROUPBY子句中。我认为最好将它们放在GROUPBY子句中,或者使用显式聚合函数(在本例中是MIN()或MAX())。这可以防止错误。

为什么第二组中的t1.count是由?它基于另一个代码。在这种情况下,它实际上并不影响结果。但是我会删除它。为什么第二组中的t1.count是BY?它是基于另一个代码的。在这种情况下,它实际上并不影响结果。不过我会删除它。我尝试了两种建议。它们似乎都有帮助,但总体结果仍然不准确。是11123412345。。。您能否详细介绍一下min()和max()聚合函数,以及我如何在查询中使用它们?前面的注释使用了join on(t1.day=t2.day和t1.hour>=t2.hour)。我尝试使用t1.day>=t2.day,结果稍微好一些,1,2,6,6,6,10,10,10,15,15,15,15。至少每5个数字左右,聚合结果是正确的。(每组重复数字的最后一个数字位于正确的位置-1,2,6,10,15)试着让你的外组按天、小时而不是仅按小时排列。我试过了,总数仍然保持为1,2,6,6,6,10。。。如果您正在尝试计数箱子,那么外部查询应该是count(*),而不是count(count)。您正在较低级别上聚合行数,而不是向已汇总的行添加增量。我尝试了这两种建议。它们似乎都有帮助,但总体结果仍然不准确。是11123412345。。。您能否详细介绍一下min()和max()聚合函数,以及我如何在查询中使用它们?前面的注释使用了join on(t1.day=t2.day和t1.hour>=t2.hour)。我尝试使用t1.day>=t2.day,结果稍微好一些,1,2,6,6,6,10,10,10,15,15,15,15。至少每5个数字左右,聚合结果是正确的。(每组重复数字的最后一个数字位于正确的位置-1,2,6,10,15)试着让你的外组按天、小时而不是仅按小时排列。我试过了,总数仍然保持为1,2,6,6,6,10。。。如果您正在尝试计数箱子,那么外部查询应该是count(*),而不是count(count)。您将在较低级别聚合行数,而不是向已汇总的行添加增量。