SQL GAME

/*
Gauss和Poincare在天堂相遇了,上帝说:你们都是人间最伟大的数学家,那我来出道题考考你们谁更聪明。
我在左手写一个大于1小于100的数,在右手同样写一个大于1小于100的数,然后把他们的和写在Gauss手上,把积写在Poincare手上,看看你们能不能猜出这两个数字是几。
Gauss看了手上的数字,说:"我不知道这两个数字是几,可我保证Poincare也不知道。
"Poincare看了手上的数字,说:"我原来的确不知道那两个数字是几,可我现在知道了。
"Gauss说:"那我也知道了。"问题:那两个数字是几? 
*/

SELECT A, B
  FROM (SELECT A,
               B,
               TOTAL,
               MUL,
               MUL_P,
               COUNT(DECODE(MUL_P, 1, 1)) OVER(PARTITION BY TOTAL) VALUE
          FROM (SELECT A,
                       B,
                       TOTAL,
                       MUL,
                       COUNT(*) OVER(PARTITION BY TOTAL) TOTAL_P,
                       COUNT(*) OVER(PARTITION BY MUL) MUL_P
                  FROM (SELECT A,
                               B,
                               TOTAL,
                               MUL,
                               MIN(MUL_P) OVER(PARTITION BY TOTAL) MUL_M
                          FROM (SELECT A.NUM A,
                                       B.NUM B,
                                       A.NUM + B.NUM TOTAL,
                                       A.NUM * B.NUM MUL,
                                       COUNT(*) OVER(PARTITION BY A.NUM + B.NUM) TOTAL_P,
                                       COUNT(*) OVER(PARTITION BY A.NUM * B.NUM) MUL_P
                                  FROM (SELECT LEVEL + 1 NUM
                                          FROM DUAL
                                        CONNECT BY LEVEL < 99) A,
                                       (SELECT LEVEL + 1 NUM
                                          FROM DUAL
                                        CONNECT BY LEVEL < 99) B
                                 WHERE A.NUM < B.NUM))
                 WHERE MUL_M != 1))
 WHERE MUL_P = 1
   AND VALUE = 1;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值