2

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

テーブルは最初に日付で並べ替えられ、2 つの時間が同じ日にある場合は時間で並べ替えられます。集計関数はカウント関数に基づいており、カウント列は 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
4

1 に答える 1

0

クエリで際立っていることが 2 つあります。

まず、結合は正時のみであるため、意味がありません。

次のように置き換えることをお勧めします。

t1.day > t2.day または (t1.day = t2.day および t1.hour >= t2.hour)

次に、外側の SELECT に original と count がありますが、group by 句にはありません。group by 句に含めるか、明示的な集計関数 (この場合は MIN() または MAX()) を使用することをお勧めします。これにより、エラーを防ぐことができます。

于 2012-08-14T23:20:27.530 に答える