楼主: newkid

首届NoCOUG国际SQL挑战赛

[复制链接]
论坛徽章:
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
21#
 楼主| 发表于 2009-9-15 22:31 | 只看该作者
原帖由 wabjtam123 于 2009-9-15 21:39 发表
NEWKID兄,你要参赛,一定能获奖的!!!

如果有热心围观群众奖我一定拿下!

使用道具 举报

回复
论坛徽章:
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
22#
发表于 2009-9-16 09:27 | 只看该作者
防火墙 还是很精密的
挡住了 http://iggyfernandez.wordpress.com/author/iggyfernandez/
但不挡住
http://iggyfernandez.files.wordpress.com/2009/07/simplified-version-of-winning-solution.doc
http://iggyfernandez.files.wordpress.com/2009/08/we-have-a-winner.pdf

使用道具 举报

回复
论坛徽章:
0
23#
发表于 2009-9-16 13:09 | 只看该作者
看到这高深莫测的傅立叶变换,突然想读研去了,跳专业到数学系~

使用道具 举报

回复
论坛徽章:
34
生肖徽章2007版:龙
日期:2012-02-07 10:32:55生肖徽章2007版:鼠
日期:2012-03-07 10:14:44复活蛋
日期:2012-11-24 15:57:36紫蛋头
日期:2012-12-29 08:04:392013年新春福章
日期:2013-02-25 14:51:24咸鸭蛋
日期:2013-06-17 16:01:33大众
日期:2013-08-27 17:21:01本田
日期:2013-11-01 08:00:35比亚迪
日期:2014-02-18 07:58:432014年新春福章
日期:2014-02-18 16:42:02
24#
发表于 2009-9-16 17:00 | 只看该作者
傅立叶变换早忘记了

使用道具 举报

回复
论坛徽章:
6
CTO参与奖
日期:2009-02-20 09:44:20数据库板块每日发贴之星
日期:2009-04-02 01:01:032009日食纪念
日期:2009-07-22 09:30:002010新春纪念徽章
日期:2010-03-01 11:21:02咸鸭蛋
日期:2011-08-29 08:45:46ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
25#
发表于 2009-9-16 17:47 | 只看该作者


还是看不见呀,怎么用DBMS_XMLGET.GETXMLTYPE运行动态SQL的,干脆把SQL贴出来得了,别让兄弟们自己到处找了。呵呵。

使用道具 举报

回复
论坛徽章:
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
26#
 楼主| 发表于 2009-9-16 21:22 | 只看该作者
原帖由 chen222246lei 于 2009-9-16 17:47 发表


还是看不见呀,怎么用DBMS_XMLGET.GETXMLTYPE运行动态SQL的,干脆把SQL贴出来得了,别让兄弟们自己到处找了。呵呵。

我不是在#17贴出来了吗?
他的解法是很巧妙的,根本不用高等数学知识。

使用道具 举报

回复
论坛徽章:
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
27#
发表于 2009-9-20 08:26 | 只看该作者
期待中文版

使用道具 举报

回复
论坛徽章:
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
28#
发表于 2009-9-20 09:41 | 只看该作者
貌似看懂了一点出题者的解法,矩阵相乘,7次=4次*2次*1次
把连接次数按二进制位分解,拼出动态sql
但他说varchar2 2048字符限制,我怎么觉得是4000
还说要用伪CARDINALITY提示避免600错误。。。

使用道具 举报

回复
论坛徽章:
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
29#
 楼主| 发表于 2009-9-21 00:33 | 只看该作者
他的解法精华就是把连接次数大大减少,和这位的思路是一样的:
http://www.pythian.com/news/2385/nocoug-sql-challenge-entry

VARCHAR2我也认为是4000.
CARDINALITY提示我去掉了也不会出错,他是在11G下试验的。他的写法在10G不能运行,最后拼接SQL会出错,不知道为什么只能CONNECT两层。

我把它修改了一下就可以在10G下运行了:
VAR N NUMBER;
EXEC :N:=7;

WITH
section1 AS  
(  
SELECT 1 AS section,  
       1 AS clause#,  
       'WITH l0 as(SELECT face_value as f,probability as p FROM die)' AS clause  
  FROM DUAL  
)
,section2 AS  
(  
SELECT 2 AS section,  
       LEVEL AS clause#,  
       ',l' || TO_CHAR (LEVEL) || ' AS(SELECT f,SUM(p) AS p FROM(SELECT t1.f+t2.f AS f, t1.p*t2.p AS p FROM l' || TO_CHAR (LEVEL - 1) || ' t1,l' || TO_CHAR (LEVEL - 1) || ' t2)GROUP BY f)' AS clause  
  FROM DUAL  
CONNECT BY POWER (2, LEVEL) <= :n  
)
,section3 AS  
(  
SELECT 3 AS section,  
       ROW_NUMBER() OVER (ORDER BY LEVEL DESC) AS clause#,  
       DECODE (BITAND (:n, POWER (2, LEVEL - 1)), 0, '', 'SELECT f,sum(p) AS p FROM(SELECT t1.f+t2.f AS f,t1.p*t2.p AS p FROM l' || TO_CHAR (LEVEL - 1) || ' t1,(') AS clause  
  FROM DUAL  
CONNECT BY POWER (2, LEVEL - 1) <= :n  
)
,section4 AS  
(  
SELECT 4 AS section,  
       1 AS clause#,  
       '(SELECT 0 AS f, 1 AS p FROM dual)' AS clause  
  FROM DUAL  
)
,section5 AS  
(  
SELECT 5 AS section,  
       ROW_NUMBER() OVER (ORDER BY LEVEL) AS clause#,  
       DECODE (BITAND (:n, POWER (2, LEVEL - 1)), 0, '', ')t2)GROUP BY f') AS clause  
  FROM DUAL  
CONNECT BY POWER (2, LEVEL - 1) <= :n  
)
,all_sections AS  
(  
SELECT ROW_NUMBER() OVER (ORDER BY section DESC, clause# DESC) AS clause#
      ,COUNT(*) OVER() AS CNT
      ,clause  
  FROM (SELECT section, clause#, clause FROM section1 UNION ALL  
        SELECT section, clause#, clause FROM section2 UNION ALL  
        SELECT section, clause#, clause FROM section3 UNION ALL  
        SELECT section, clause#, clause FROM section4 UNION ALL  
        SELECT section, clause#, clause FROM section5)  
WHERE LENGTH(clause) != 0  
)
,sql_text AS  
(  
SELECT REPLACE(SYS_CONNECT_BY_PATH (clause, '|'),'|') AS sql_text  
  FROM all_sections  
WHERE clause# =1
START WITH clause# = CNT
CONNECT BY clause# = PRIOR clause#-1
)
,xml_string AS  
(  
SELECT DBMS_XMLGEN.getxmltype (sql_text) xml_string  
  FROM sql_text  
)
SELECT sum,  
       probability  
  FROM xml_string,  
       XMLTABLE  
       ('$x/ROWSET/ROW' PASSING xml_string AS "x"  
         COLUMNS  
           sum NUMBER PATH 'F',  
           probability NUMBER PATH 'P'  
       ) x  
ORDER BY sum ;

我修改了两个子查询:ALL_SECTIONS和SQL_TEXT.

使用道具 举报

回复
论坛徽章:
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
30#
发表于 2009-9-21 09:14 | 只看该作者
newkid可以改成niu(牛)kid

使用道具 举报

回复

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

本版积分规则 发表回复

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