|
本帖最后由 〇〇 于 2024-10-29 11:03 编辑
27楼的duckdb语法改写,差了几万,不知问题出在哪
with t0 as
(select level*2+1 l from range(1,1+(sqrt(1000000)/2)::int) _(level)),
t1 as (select level*2+1 l from range(1,1+(sqrt(1000000)/3)::int) _(level))
,p1k as(select l from t0
except
select t1.l*t2.l from t1,t1 t2 where t1.l<=sqrt(sqrt(1000000))
and t1.l<=t2.l and t1.l*t2.l<=1000000
)
,t as
(select level*6+1 l from range(1,1+(1000000/6)::int) _(level)
union all
select level*6+5 l from range(1,1+(1000000/6)::int) _(level)
)
,p2m as(select l from t
except
select /*+ USE_MERGE (t1 t2) */ t1.l*t2.l from p1k t1,t t2 where t1.l<=sqrt(1000000)
and t1.l<=t2.l and t1.l*t2.l<=1000000 and t2.l<=(1000000/19)
except
select level*5 from range(1,1+(1000000/5)::int) _(level)
except
select level*7+7 from range(1,1+(1000000/7)::int) _(level)
except
select level*11+11 from range(1,1+(1000000/11)::int) _(level)
except
select level*13+13 from range(1,1+(1000000/13)::int) _(level)
except
select level*17+17 from range(1,1+(1000000/17)::int) _(level)
)
select sum(l) from p2m;
37553402024
Run Time (s): real 0.200 user 0.343202 sys 0.296402
溢出了
D select * from t24 order by l desc limit 10;
1000007
1000003
1000001
|
|