y****w 发帖数: 3747 | | gy 发帖数: 620 | | B*****g 发帖数: 34098 | | y****w 发帖数: 3747 | 4 1. 要自己生成
2. single sql最好。
我写了个db2的,用sql server函数替换了一下,还成;
【在 B*****g 的大作中提到】 : 问题: : 1. Fibonacci Series 已经存在了还是要用sql 产生? : 2. single query可以用几层select? : 明天上午搞一个oracle的,然后看能不能换成t-sql
| B*****g 发帖数: 34098 | 5 有几个select?
【在 y****w 的大作中提到】 : 1. 要自己生成 : 2. single sql最好。 : 我写了个db2的,用sql server函数替换了一下,还成;
| y****w 发帖数: 3747 | 6 5个,用的是字符串函数。
后来改了下用数字,两层cte,7次(sql server则多一次,替换values)出现select,在我破x41上快了一倍,大约0.07s.
我贴个db2的,替换下函数就可以在sql server上跑。
你把oracle的做法贴一下吧,我不会oracle,今天下午试了好像oracle的cte差点,但是connect by不错。
with fibo(d1,d2,n) as
(
values (cast(1 as bigint), cast(1 as bigint),1)
union all
select d2, d1+d2, n+1 from fibo where n+1 < 92
),
f1(fibo,step,digit,cnt)as
(
select d2, d2/10, mod(d2,10),
case when mod(mod(d2,100),11) = 0 then 1 else 0 end from fibo
union all
select fibo, step/10, mod(step,10),
case when
【在 B*****g 的大作中提到】 : 有几个select?
| t**********9 发帖数: 1085 | 7 这种算法一般在application 层面实现吧,为什么一定要在db实现? | B*****g 发帖数: 34098 | 8 Oracle 10g+, 那个expected output不对呀
WITH t1 AS (
SELECT f, l-1 l
FROM DUAL
CONNECT BY LEVEL <= 10
MODEL RETURN ALL ROWS
PARTITION BY (LEVEL l)
DIMENSION BY (0 d)
MEASURES (0 f)
RULES
ITERATE (92)
(f[iteration_number] = DECODE (iteration_number, 0, 1, 1, 0, f[iteration_num
ber - 2]) + NVL (f[iteration_number - 1], 0))),
t2 AS (
SELECT f, SUM(SIGN(INSTR(f, l, 1 ,2))) c, ROW_NUMBER() OVER (PARTITION BY SU
M(SIGN(INSTR(f, l, 1 ,2))) ORDER BY f) r
FROM t1
GROUP BY f)
SELECT f, c
FROM t2
WHERE r <= 5
AN
【在 y****w 的大作中提到】 : 5个,用的是字符串函数。 : 后来改了下用数字,两层cte,7次(sql server则多一次,替换values)出现select,在我破x41上快了一倍,大约0.07s. : 我贴个db2的,替换下函数就可以在sql server上跑。 : 你把oracle的做法贴一下吧,我不会oracle,今天下午试了好像oracle的cte差点,但是connect by不错。 : with fibo(d1,d2,n) as : ( : values (cast(1 as bigint), cast(1 as bigint),1) : union all : select d2, d1+d2, n+1 from fibo where n+1 < 92 : ),
| B*****g 发帖数: 34098 | 9 db developer 牛不牛是用写sql来衡量的
【在 t**********9 的大作中提到】 : 这种算法一般在application 层面实现吧,为什么一定要在db实现?
| y****w 发帖数: 3747 | 10 学习了,
btw,你是指最后那一个值? 如果一个数字有两个连续出现,按这次的规则只计数一次。
昨天在台破机器这样按数值算快一倍,今天在主力机器的sql/db2,aix的db2测的结果都
差于substr的方案。
【在 B*****g 的大作中提到】 : Oracle 10g+, 那个expected output不对呀 : WITH t1 AS ( : SELECT f, l-1 l : FROM DUAL : CONNECT BY LEVEL <= 10 : MODEL RETURN ALL ROWS : PARTITION BY (LEVEL l) : DIMENSION BY (0 d) : MEASURES (0 f) : RULES
| | | B*****g 发帖数: 34098 | 11 看错了,重复数要连着。改一下,明天上班才能测试
WITH t1 AS (
SELECT f, TO_CHAR(l-1)||TO_CHAR(l-1) l
FROM DUAL
CONNECT BY LEVEL <= 10
MODEL RETURN ALL ROWS
PARTITION BY (LEVEL l)
DIMENSION BY (0 d)
MEASURES (0 f)
RULES
ITERATE (92)
(f[iteration_number] = DECODE (iteration_number, 0, 1, 1, 0, f[iteration_num
ber - 2]) + NVL (f[iteration_number - 1], 0))),
t2 AS (
SELECT f, SUM(SIGN(INSTR(f, l))) c, ROW_NUMBER() OVER (PARTITION BY SUM(SIGN
(INSTR(f, l))) ORDER BY f) r
FROM t1
GROUP BY f)
SELECT f, c
FROM t2
WHERE r <= 5
A
【在 y****w 的大作中提到】 : 学习了, : btw,你是指最后那一个值? 如果一个数字有两个连续出现,按这次的规则只计数一次。 : 昨天在台破机器这样按数值算快一倍,今天在主力机器的sql/db2,aix的db2测的结果都 : 差于substr的方案。
| y****w 发帖数: 3747 | 12 今天好好学习了下connect by的用法,很不错,
【在 B*****g 的大作中提到】 : 看错了,重复数要连着。改一下,明天上班才能测试 : WITH t1 AS ( : SELECT f, TO_CHAR(l-1)||TO_CHAR(l-1) l : FROM DUAL : CONNECT BY LEVEL <= 10 : MODEL RETURN ALL ROWS : PARTITION BY (LEVEL l) : DIMENSION BY (0 d) : MEASURES (0 f) : RULES
| gy 发帖数: 620 | | B*****g 发帖数: 34098 | 14 oracle论坛有个哥们善用xml functions,别人写不出的sql伊都能写出来,非常牛。
【在 y****w 的大作中提到】 : 今天好好学习了下connect by的用法,很不错,
| B*****g 发帖数: 34098 | 15 牛人一般不动手,光动嘴
【在 gy 的大作中提到】 : 都是牛银呀
| y****w 发帖数: 3747 | 16 哈,这个比较另类。我也就做合并多行时候用一下xml function。 xml本身既是线性字
串又是结构化对象,用来做过渡再合适不过,
【在 B*****g 的大作中提到】 : oracle论坛有个哥们善用xml functions,别人写不出的sql伊都能写出来,非常牛。
| i***d 发帖数: 158 | 17 北京MM就是一牛人呀
【在 B*****g 的大作中提到】 : 牛人一般不动手,光动嘴
| f**s 发帖数: 2225 | 18 beijing是mm啊
【在 i***d 的大作中提到】 : 北京MM就是一牛人呀
|
|