楼主: ~贝贝~

[精华] “盛拓传媒杯”SQL数据库编程大赛第一期评分及所有参赛选手答题揭晓!

[复制链接]
论坛徽章:
52
SQL数据库编程大师
日期:2011-04-13 12:09:01奥运会纪念徽章:水球
日期:2012-10-08 09:35:51蛋疼蛋
日期:2012-11-19 10:28:53鲜花蛋
日期:2012-12-05 14:37:57紫蛋头
日期:2012-12-11 17:27:27紫蛋头
日期:2012-12-24 23:00:26兰博基尼
日期:2013-11-21 09:19:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
61#
发表于 2011-3-16 09:42 | 只看该作者
原帖由 ccnp 于 2011-3-16 09:36 发表
呵呵, 我也可以我算出来92种答案直接select 出来, 我也证明了,只有92种答案,在纸上,哈哈,和用=2是半斤八两


我个人认为这种结果比错误的结果好

使用道具 举报

回复
论坛徽章:
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
62#
发表于 2011-3-16 09:49 | 只看该作者
原帖由 accelerator 于 2011-3-16 09:32 发表
"第一届“盛拓传媒杯”SQL数据库编程大赛宗旨并非考核脑筋急转弯或高深的算法考核各位puber的算法能力,而且主要以PL/SQL的技巧和技能,以及对SQL新功能的掌握能力,性能优化能力,并附带考核对数据库体系结构的综合理解。题目均以oracle自带的HR或Scott示例数据库为平台。"


为什么这么多人都考虑到可以直接写 =2 ,而不用  



我就是MN,哈哈,给你SHOW 下我的CODE(其实现在再回头来看,觉得后面求最大值的地方也不够严密的。。。)

with t as (
           select 0 c1,0 c2,0 c3,0 c4,0 c5 from dual
           union all
           select 1 c1,0 c2,0 c3,0 c4,0 c5 from dual
           union all
           select 0 c1,1 c2,0 c3,0 c4,0 c5 from dual
           union all
           select 0 c1,0 c2,1 c3,0 c4,0 c5 from dual
           union all
           select 0 c1,0 c2,0 c3,1 c4,0 c5 from dual
           union all
           select 0 c1,0 c2,0 c3,0 c4,1 c5 from dual
           union all
           select 1 c1,1 c2,0 c3,0 c4,0 c5 from dual
           union all
           select 1 c1,0 c2,1 c3,0 c4,0 c5 from dual
           union all
           select 1 c1,0 c2,0 c3,1 c4,0 c5 from dual
           union all
           select 1 c1,0 c2,0 c3,0 c4,1 c5 from dual
           union all
           select 0 c1,1 c2,1 c3,0 c4,0 c5 from dual
           union all
           select 0 c1,1 c2,0 c3,1 c4,0 c5 from dual
           union all
           select 0 c1,1 c2,0 c3,0 c4,1 c5 from dual
           union all
           select 0 c1,0 c2,1 c3,1 c4,0 c5 from dual
           union all
           select 0 c1,0 c2,1 c3,0 c4,1 c5 from dual
           union all
           select 0 c1,0 c2,0 c3,1 c4,1 c5 from dual
           --这个部分构造行不超过两个球的全部组合
           )
select
        rownum cnum,
        c11||c12||c13||c14||c15||c21||c22||c23||c24||c25||c31||c32||c34||c35||c41||c42||c43||c44||c45||c51||c52||c53||c54||c55
        as final_result
   from (
         select
               a.c1+a.c2+a.c3+a.c4+a.c5+b.c1+b.c2+b.c3+b.c4+b.c5+c.c1+c.c2+c.c3+c.c4
                 +c.c5+d.c1+d.c2+d.c3+d.c4+d.c5+e.c1+e.c2+e.c3+e.c4+e.c5 csum,
               a.c1 c11,
               a.c2 c12,
               a.c3 c13,
               a.c4 c14,
               a.c5 c15,
               b.c1 c21,
               b.c2 c22,
               b.c3 c23,
               b.c4 c24,
               b.c5 c25,
               c.c1 c31,
               c.c2 c32,
               c.c3 c33,
               c.c4 c34,
               c.c5 c35,
               d.c1 c41,
               d.c2 c42,
               d.c3 c43,
               d.c4 c44,
               d.c5 c45,
               e.c1 c51,
               e.c2 c52,
               e.c3 c53,
               e.c4 c54,
               e.c5 c55
          from t a,
               t b,
               t c,
               t d,
               t e
               --5表自JION 得到所有可能的解
         where a.c1+b.c1+c.c1+d.c1+e.c1 <=2
           and a.c2+b.c2+c.c2+d.c2+e.c2 <=2
           and a.c3+b.c3+c.c3+d.c3+e.c3 <=2
           and a.c4+b.c4+c.c4+d.c4+e.c4 <=2
           and a.c5+b.c5+c.c5+d.c5+e.c5 <=2
           --保证列不超过两个球
        )
   where c21+c12<=2
     and c31+c22+c13<=2
     and c41+c32+c23+c14<=2
     and c51+c42+c33+c24+c15<=2
     and c52+c43+c34+c25<=2
     and c53+c44+c35<=2
     and c54+c45<=2
     and c41+c52<=2
     and c31+c42+c53<=2
     and c21+c32+c43+c54<=2
     and c11+c22+c33+c44+c55<=2
     and c12+c23+c34+c45<=2
     and c13+c24+c35<=2
     and c14+c25<=2
     --上面是14条斜线不超过两个球
     and csum = ( select max(csum)
                    --取满足条件的最大值
                    from
                    (
                     select
                           a.c1+a.c2+a.c3+a.c4+a.c5+b.c1+b.c2+b.c3+b.c4+b.c5+c.c1+c.c2+c.c3+c.c4
                             +c.c5+d.c1+d.c2+d.c3+d.c4+d.c5+e.c1+e.c2+e.c3+e.c4+e.c5 csum
                      from t a,
                           t b,
                           t c,
                           t d,
                           t e
                     where a.c1+b.c1+c.c1+d.c1+e.c1 <=2
                       and a.c2+b.c2+c.c2+d.c2+e.c2 <=2
                       and a.c3+b.c3+c.c3+d.c3+e.c3 <=2
                       and a.c4+b.c4+c.c4+d.c4+e.c4 <=2
                       and a.c5+b.c5+c.c5+d.c5+e.c5 <=2        
                     )
                 )
   order by 2 desc;

使用道具 举报

回复
论坛徽章:
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
63#
发表于 2011-3-16 09:50 | 只看该作者
c11||c12||c13||c14||c15||c21||c22||c23||c24||c25||c31||c32||c34||c35||c41||c42||c43||c44||c45||c51||c52||c53||c54||c55

中间少了c33......

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
64#
发表于 2011-3-16 09:57 | 只看该作者
怪了

[code]
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

Elapsed: 00:00:00.00

SQL> get a1
  1  with
  2  t1 as(select rownum-1 c from dual connect by rownum < 3),
  3  t2 as
  4  (select a.c a, b.c b, c.c, d.c d, e.c e ,a.c+b.c +c.c+d.c + e.c n,a.c||b.c||c.c||d.c||e.c s
  5      from t1 a, t1 b, t1 c, t1 d, t1 e
  6     where a.c + b.c + c.c + d.c + e.c < 3) ,
  7  t3 as
  8  (select   a.s || b.s || e.s ||d.s || e.s  x,
  9          (a.n + b.n + c.n + d.n +  e.n ) y
10      from t2 a, t2 b, t2 c, t2 d, t2 e
11     where a.a + b.a + c.a + d.a + e.a < 3
12       and a.b + b.b + c.b + d.b + e.b < 3
13       and a.c + b.c + c.c + d.c + e.c < 3
14       and a.d + b.d + c.d + d.d + e.d < 3
15       and a.e + b.e + c.e + d.e + e.e < 3
16       and a.c + b.b + c.a < 3
17       and a.d + b.c + c.b + d.a < 3
18       and a.e + b.d + c.c + d.b + e.a < 3
19       and b.e + c.d + d.c + e.b < 3
20       and c.e + d.d + e.c < 3
21       and a.c + b.d + c.e < 3
22       and a.b + b.c + c.d + d.e < 3
23       and a.a + b.b + c.c + d.d + e.e < 3
24       and b.a + c.b + d.c + e.d < 3
25       and c.a + d.b + e.c < 3)
26* select rank() over(order by x desc)rn ,x from t3 where y =(select max(y)from t3)
27  /

92 rows selected.

Elapsed: 00:00:03.38

Statistics
----------------------------------------------------------
         11  recursive calls
        698  db block gets
     164890  consistent gets
        667  physical reads
       1800  redo size
       4097  bytes sent via SQL*Net to client
        485  bytes received via SQL*Net from client
          8  SQL*Net roundtrips to/from client
          6  sorts (memory)
          0  sorts (disk)
         92  rows processed

SQL> get a2
  1  with t1 as
  2  (select rownum-1 c from dual connect by rownum < 3),
  3  t2 as
  4  (select a.c a, b.c b, c.c, d.c d, e.c e ,a.c+b.c +c.c+d.c + e.c n,a.c||b.c||c.c||d.c||e.c s
  5      from t1 a, t1 b, t1 c, t1 d, t1 e
  6     where a.c + b.c + c.c + d.c + e.c < 3) ,
  7  t3 as
  8  (select   a.s || b.s || e.s ||d.s || e.s  x,
  9          (a.n + b.n + c.n + d.n +  e.n ) y,
10           max(a.n + b.n + c.n + d.n +  e.n)over() z
11      from t2 a, t2 b, t2 c, t2 d, t2 e
12     where a.a + b.a + c.a + d.a + e.a < 3
13       and a.b + b.b + c.b + d.b + e.b < 3
14       and a.c + b.c + c.c + d.c + e.c < 3
15       and a.d + b.d + c.d + d.d + e.d < 3
16       and a.e + b.e + c.e + d.e + e.e < 3
17       and a.c + b.b + c.a < 3
18       and a.d + b.c + c.b + d.a < 3
19       and a.e + b.d + c.c + d.b + e.a < 3
20       and b.e + c.d + d.c + e.b < 3
21       and c.e + d.d + e.c < 3
22       and a.c + b.d + c.e < 3
23       and a.b + b.c + c.d + d.e < 3
24       and a.a + b.b + c.c + d.d + e.e < 3
25       and b.a + c.b + d.c + e.d < 3
26       and c.a + d.b + e.c < 3)
27* select rank() over(order by x desc)rn ,x from t3 where y = z
SQL> /

92 rows selected.

Elapsed: 00:00:03.85

Statistics
----------------------------------------------------------
          4  recursive calls
         16  db block gets
     163552  consistent gets
          2  physical reads
       1228  redo size
       4097  bytes sent via SQL*Net to client
        485  bytes received via SQL*Net from client
          8  SQL*Net roundtrips to/from client
          7  sorts (memory)
          0  sorts (disk)
         92  rows processed



原帖由 〇〇 于 2011-3-16 09:40 发表

我这里11.2.0.1

new code1 : 00: 00: 02.04

new code2 : 00: 00: 02.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
65#
发表于 2011-3-16 10:03 | 只看该作者
原帖由 solomon_007 于 2011-3-16 09:50 发表
c11||c12||c13||c14||c15||c21||c22||c23||c24||c25||c31||c32||c34||c35||c41||c42||c43||c44||c45||c51||c52||c53||c54||c55

中间少了c33......



----------------------- to accelerator


衡量一个结果最重要的一个标准是什么? 我认为是结果的正确性,如果输出的结果没满足要求,或者甚至是错的,再高效有什么用? "算法高效,可惜最后粗心,导致结果全错了,最终结果由于少写一个数字,很遗憾显示的全错了",这样的结果怎么能比大多数答题正确的结果分还高,怎么解释?


呵呵,一口怨气,不吐不快.


看你的语气,你是典型的以结果为导向型的人,不过幸亏你不是评委,哈哈。。。。。。

使用道具 举报

回复
论坛徽章:
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
66#
发表于 2011-3-16 10:04 | 只看该作者
我对OL的探测法还是有些不理解,为什么一定能探到10个?万一10个解法在后面输出呢?

使用道具 举报

回复
论坛徽章:
52
SQL数据库编程大师
日期:2011-04-13 12:09:01奥运会纪念徽章:水球
日期:2012-10-08 09:35:51蛋疼蛋
日期:2012-11-19 10:28:53鲜花蛋
日期:2012-12-05 14:37:57紫蛋头
日期:2012-12-11 17:27:27紫蛋头
日期:2012-12-24 23:00:26兰博基尼
日期:2013-11-21 09:19:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
67#
发表于 2011-3-16 10:06 | 只看该作者
-- to solomon_007

楼上的,不是针对你的个人的,语气生硬,敬请谅解

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
68#
发表于 2011-3-16 10:06 | 只看该作者
对了,第二期有可能在11.2.0.1上碰到bug: 9002336


alter system set "_optimizer_distinct_agg_transform"=false


原帖由 〇〇 于 2011-3-16 09:40 发表

我这里11.2.0.1

new code1 : 00: 00: 02.04

new code2 : 00: 00: 02.20

使用道具 举报

回复
论坛徽章:
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
69#
发表于 2011-3-16 10:07 | 只看该作者
原帖由 newkid 于 2011-3-16 10:04 发表
我对OL的探测法还是有些不理解,为什么一定能探到10个?万一10个解法在后面输出呢?

如果有10,一定会先出来,不可能在后面
http://www.itpub.net/viewthread. ... age%3D1#pid17399398

使用道具 举报

回复
论坛徽章:
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
70#
发表于 2011-3-16 10:09 | 只看该作者
原帖由 solomon_007 于 2011-3-16 10:03 发表



----------------------- to accelerator


衡量一个结果最重要的一个标准是什么? 我认为是结果的正确性,如果输出的结果没满足要求,或者甚至是错的,再高效有什么用? "算法高效,可惜最后粗心,导致结果全错了,最终结果由于少写一个数字,很遗憾显示的全错了",这样的结果怎么能比大多数答题正确的结果分还高,怎么解释?


呵呵,一口怨气,不吐不快.


看你的语气,你是典型的以结果为导向型的人,不过幸亏你不是评委,哈哈。。。。。。


呵呵,不同评委的口味相差也很大,像我对结果的正确性就要求比较高。多多包涵吧!

使用道具 举报

回复

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

本版积分规则 发表回复

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