iT邦幫忙

0

sqlite3 每幾列一個平均

大家好,我想請教一個問題
目前我在使用SQLITE3
有需求是想在資料表內,每隔幾個row就算一次平均
比如說:

Uid data
0 10
1 20
2 50
3 60

想得出每2列一次平均

avg
15
55

要得到這樣的資料,
想請問sqlite3 cmd該怎麼下,謝謝

我有找過關於over的資料
但over照著官網的範例下也是會出現syntax error
目前限制是僅能使用sqlite3.24版本
謝謝好心人士幫忙解答

4
一級屠豬士
iT邦高手 1 級 ‧ 2019-03-26 15:11:04
最佳解答
-- 我是使用 Postgresql 為範例.
-- sqlite 也有 Aggregate Window Functions ; 你先試試看
-- round() 可以視需要使用

create table ithelp190326a (
  uid smallint primary key
, data smallint not null
);

insert into ithelp190326a values
(0, 10), (1, 20), (2, 50), (3, 60);

select round(inavg) as "avg"
  from (select uid
             , avg (data) over (order by uid range between 1 PRECEDING and CURRENT ROW) as "inavg"
          from ithelp190326a) a
 where (uid % 2) = 1;
 
+-----+
| avg |
+-----+
|  15 |
|  55 |
+-----+
(2 rows) 
看更多先前的回應...收起先前的回應...

/images/emoticon/emoticon35.gif

這麼無意義困難的需求都寫得出來
給您按三個
/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif

froce iT邦大師 3 級 ‧ 2019-03-26 16:03:52 檢舉

海綿寶寶太誠實了。XD

對一些應用來說,有這樣的需求.

謝謝大神給的範例提供參考
如有問題會再請教
謝謝~

0
froce
iT邦大師 3 級 ‧ 2019-03-26 16:11:07

最近在學pandas,給點其他解法:

import pandas as pd
import numpy as np
import sqlite3

conn = sqlite3.connect("Db.db")

df = pd.read_sql_query("select * from Table order by uid;", conn)
df.groupby(np.arange(len(df))//2).mean()[1]

解決。

你這個方式,前提是 select的資料 依照順序 回傳.
實際上可能不是,最好加上 order by uid.

感謝回應,但應該用不上QQ

froce iT邦大師 3 級 ‧ 2019-03-26 18:19:39 檢舉

真的耶,忘記先排序了。
改了。

1
marlin12
iT邦新手 2 級 ‧ 2019-03-26 21:38:10

https://ithelp.ithome.com.tw/upload/images/20190326/20109232YAyE1WxCI7.jpg

感謝這位大大
一看就知道自己想太多了
換個方式思考也是可以做出來

我要發表回答

立即登入回答