查看: 2550|回复: 13

sqlite 3.25支持分析函数了

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
跳转到指定楼层
1#
发表于 2018-9-28 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sqlite> with t(a) as (select 1  union all select a+1 from t where a<6)
   ...> select t.a, avg(a)over()a1,avg(a)over(order by a)a2 from t;
1|3.5|1.0
2|3.5|1.5
3|3.5|2.0
4|3.5|2.5
5|3.5|3.0
6|3.5|3.5
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
2#
 楼主| 发表于 2018-9-28 15:43 | 只看该作者

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
3#
 楼主| 发表于 2018-9-28 15:54 | 只看该作者
可以用来解题
sqlite> with t(n) as (select 1  union all select n+1 from t where n<100),
   ...>      s as (select a.n
   ...>              from t a,t b
   ...>             where a.n >= 2*b.n
   ...>               and a.n%b.n = 0
   ...>             group by a.n
   ...>            having sum(b.n) > a.n)
   ...> select max(gap) from ( select lead(n) over(order by n) - n as gap from s)
   ...> ;
6

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
4#
 楼主| 发表于 2018-9-28 16:13 | 只看该作者
〇〇 发表于 2018-9-28 15:54
可以用来解题
sqlite> with t(n) as (select 1  union all select n+1 from t where n      s as (select  ...

比oracle执行快
SQL> set timi on  
SQL> 1
  1* with t as (select level n from dual connect by level <= 100),
SQL> c/100/10000
  1* with t as (select level n from dual connect by level <= 10000),
SQL> /

  MAX(GAP)
----------
         6

Elapsed: 00:00:15.11


sqlite> .timer on
sqlite> with t(n) as (select 1  union all select n+1 from t where n<10000),
   ...>      s as (select a.n
   ...>              from t a,t b
   ...>             where a.n >= 2*b.n
   ...>               and a.n%b.n = 0
   ...>             group by a.n
   ...>            having sum(b.n) > a.n)
   ...> select max(gap) from ( select lead(n) over(order by n) - n as gap from s)
   ...> ;
6
Run Time: real 9.755 user 9.732521 sys 0.004999

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
5#
 楼主| 发表于 2018-9-28 16:18 | 只看该作者
oracle改为浮点数,快一点
SQL> with t(n) as (select cast (1 as BINARY_FLOAT) from dual union all select cast ( n+1 as BINARY_FLOAT) from t where n<10000),
  2       s as (select a.n
  3               from t a,t b
  4              where a.n >= 2*b.n
  5                and mod(a.n,b.n) = 0
  6              group by a.n
  7             having sum(b.n) > a.n)
  8  select max(gap) from ( select lead(n) over(order by n) - n as gap from s)
  9  ;

  MAX(GAP)
----------
  6.0E+000

Elapsed: 00:00:11.20

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
6#
发表于 2018-9-28 17:51 | 只看该作者
才 2M ,好mini

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
7#
 楼主| 发表于 2018-9-28 18:15 来自手机 | 只看该作者
过去mysql也只有几M

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
8#
发表于 2018-9-28 22:11 | 只看该作者
在我这里还是没有ORACLE快:

sqlite> .timer on
sqlite> with t(n) as (select 1  union all select n+1 from t where n<10000),
   ...>      s as (select a.n
   ...>              from t a,t b
   ...>             where a.n >= 2*b.n
   ...>               and a.n%b.n = 0
   ...>             group by a.n
   ...>            having sum(b.n) > a.n)
   ...> select max(gap) from ( select lead(n) over(order by n) - n as gap from s
)
   ...> ;
6
Run Time: real 11.334 user 11.310073 sys 0.015600
sqlite>


jsu@JSU12P>  with t(n) as (select 1 from dual union all select  n+1  from t where n<10000),
  2        s as (select a.n
  3                from t a,t b
  4               where a.n >= 2*b.n
  5                 and mod(a.n,b.n) = 0
  6               group by a.n
  7              having sum(b.n) > a.n)
  8   select max(gap) from ( select lead(n) over(order by n) - n as gap from s)
  9   ;

  MAX(GAP)
----------
         6

Elapsed: 00:00:09.85

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
9#
 楼主| 发表于 2018-9-29 07:55 | 只看该作者
newkid 发表于 2018-9-28 22:11
在我这里还是没有ORACLE快:

sqlite> .timer on

你怎么调优oracle的,我的配置不低了
SQL> set timi on
SQL> with t(n) as (select 1 from dual union all select  n+1  from t where n<10000),
  2       s as (select a.n
  3               from t a,t b
  4              where a.n >= 2*b.n
  5                and mod(a.n,b.n) = 0
  6              group by a.n
  7             having sum(b.n) > a.n)
  8  select max(gap) from ( select lead(n) over(order by n) - n as gap from s)
  9  ;

  MAX(GAP)
----------
         6

Elapsed: 00:00:11.52
SQL> show sga

Total System Global Area 8.1336E+10 bytes
Fixed Size                  7653480 bytes
Variable Size            1.4764E+10 bytes
Database Buffers         6.5230E+10 bytes
Redo Buffers              260780032 bytes
In-Memory Area           1073741824 bytes

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
10#
 楼主| 发表于 2018-9-29 07:57 | 只看该作者
〇〇 发表于 2018-9-29 07:55
你怎么调优oracle的,我的配置不低了
SQL> set timi on
SQL> with t(n) as (select 1 from dual union  ...

sqlite是自己编译的
gcc shell.c sqlite3.c -lpthread -ldl -O3 -o sqlite3

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表