Mysql 总订单
我在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
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)。您将在较低级别聚合行数,而不是向已汇总的行添加增量。