[英]MySQL Average Every 4 Rows
我有一個超過一千萬的行表,看起來像這樣:
id | time_read | value
-----------------------
9 1111111111 100
9 1111111222 200
9 1111111333 150
9 1111111444 225
我想對每4行AVG值。 如何在MySQL中做到這一點?
另外,作為第二個問題,如果我想對一個月中所有數據的每4行平均值進行平均,然后將該表中每年每個月的總數返回,該怎么辦? 例如,在我的第一個問題中使用相同的表,最后得到:
2008 | 12 | 500000
2009 | 01 | 450000
2009 | 02 | 475000
編輯:換句話說,每個平均4行的總數按年-月分組。 每個time_read相隔15分鍾。
我以前做過類似的事情,但是不夠准確。 我需要平均每4行並求和,而不是將一個月中所有值的總和除以4。
SELECT DATE_FORMAT(FROM_UNIXTIME(time_read),'%Y %m') as tr,
DATE_FORMAT(FROM_UNIXTIME(time_read),'%Y') as year,
DATE_FORMAT(FROM_UNIXTIME(time_read),'%m') as month, SUM(value) as value
FROM table WHERE id = 9
GROUP BY tr
我不知道您是否故意這樣做,但我認為這只是一個拼寫錯誤:您的ID是每行9。
如果是這樣,您可能正在尋找以下查詢:
SELECT AVG(value) AS val, CEIL(id / 4) AS group_id FROM table GROUP BY group_id
第二個問題:
SELECT SUM(val) FROM (SELECT AVG(value) AS val, CEIL(id / 4) AS group_id FROM table GROUP BY group_id) AS fred
目前,我無法為第二個問題提供where
-part,因為我不知道您如何按日期過濾內容(我看不到日期列或其他內容)。 所以就目前而言,這將計算sum
的所有平均value
由4分組秒。
如果您不想依賴“ id”列(它可能不是順序的),則可以創建自己的變量來按每4行更改一次,例如:
SET @rank = 0;
SELECT AVG(value), CEIL((@rank:=@rank+1)/4) AS rank FROM "your_table" GROUP BY rank;
試試這個代碼-
CREATE TABLE table1 (
id INT(11) NOT NULL AUTO_INCREMENT,
time_read INT(11) DEFAULT NULL,
value INT(11) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO table1 VALUES
(1, 1312880400, 10), -- 09.08.2011 12:00:00 -> 1 august
(2, 1312880410, 20), -- 09.08.2011 12:00:10 -> 2
(3, 1312880420, 30), -- 09.08.2011 12:00:20 -> 3
(4, 1312880430, 40), -- 09.08.2011 12:00:30 -> 4
(5, 1312880440, 50), -- 09.08.2011 12:00:40 -> 5
(6, 1315558800, 60), -- 09.09.2011 12:00:00 -> 1 september
(7, 1315558810, 70); -- 09.09.2011 12:00:10 -> 2
SELECT AVG(value) FROM (
SELECT t1.*, COUNT(*) cnt FROM table1 t1
LEFT JOIN table1 t2
ON t2.time_read <= t1.time_read
AND YEAR(FROM_UNIXTIME(t2.time_read)) = YEAR(FROM_UNIXTIME(t1.time_read))
AND MONTH(FROM_UNIXTIME(t2.time_read)) = MONTH(FROM_UNIXTIME(t1.time_read))
GROUP
BY time_read
) t
GROUP BY
YEAR(FROM_UNIXTIME(time_read)), MONTH(FROM_UNIXTIME(time_read)), CEIL(cnt/4);
+------------+
| AVG(value) |
+------------+
| 25.0000 |
| 50.0000 |
| 65.0000 |
+------------+
它按月分組並按月進行4條記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.