# 高手过招:用SQL解决环环相扣的刑侦推理问题(苏旭辉版本)

with q as (select 'A' c FROM DUAL UNION ALL SELECT 'B' FROM DUAL UNION ALL SELECT 'C' FROM DUAL UNION ALL SELECT 'D' FROM DUAL) ,q2 as ( SELECT q1.c||q2.c||q3.c||q4.c||q5.c||q6.c||q7.c||q8.c||q9.c||q10.c s ,q7.c c7 ,q10.c c10 FROM q q1,q q2,q q3,q q4,q q5,q q6,q q7,q q8,q q9,q q10 WHERE q2.c||q5.c IN ('AC','BD','CA','DB') AND q3.c = CASE WHEN q3.c NOT IN (q6.c,q2.c,q4.c) THEN 'A' WHEN q6.c NOT IN (q3.c,q2.c,q4.c) THEN 'B' WHEN q2.c NOT IN (q3.c,q6.c,q4.c) THEN 'C' WHEN q4.c NOT IN (q3.c,q6.c,q2.c) THEN 'D' END AND q4.c=CASE WHEN q1.c=q5.c THEN 'A' WHEN q2.c=q7.c THEN 'B' WHEN q1.c=q9.c THEN 'C' WHEN q6.c=q10.c THEN 'D' END AND q5.c=DECODE(q5.c,q8.c,'A',q4.c,'B',q9.c,'C',q7.c,'D') AND q6.c=DECODE(q8.c||q8.c,q2.c||q4.c,'A',q1.c||q6.c,'B',q3.c||q10.c,'C',q5.c||q9.c,'D') AND ABS(DECODE(q8.c,'A',ASCII(q7.c) ,'B',ASCII(q5.c) ,'C',ASCII(q2.c) ,'D',ASCII(q10.c) )-ASCII(q1.c))<>1 AND DECODE(q1.c,q6.c,1,-1) =- DECODE(DECODE(q9.c,'A',q6.c,'B',q10.c,'C',q2.c,'D',q9.c),q5.c,1,-1) ) ,q3 AS (SELECT q2.*,REGEXP_COUNT(s,'A') ca,REGEXP_COUNT(s,'B') cb,REGEXP_COUNT(s,'C') cc,REGEXP_COUNT(s,'D') cd FROM q2) SELECT s FROM q3 WHERE c7=DECODE(LEAST(ca,cb,cc,cd),cc,'A',cb,'B',ca,'C',cd,'D') AND c10=DECODE(GREATEST(ca,cb,cc,cd)-LEAST(ca,cb,cc,cd),3,'A',2,'B',4,'C',1,'D') ; S ---------- BCACACDABA

with q as (select LEVEL c FROM DUAL CONNECT BY LEVEL<=4) ,q2 as ( SELECT q1.c||q2.c||q3.c||q4.c||q5.c||q6.c||q7.c||q8.c||q9.c||q10.c s ,q7.c c7 ,q10.c c10 FROM q q1,q q2,q q3,q q4,q q5,q q6,q q7,q q8,q q9,q q10 WHERE q2.c||q5.c IN ('13','24','31','42') AND q3.c = CASE WHEN q3.c NOT IN (q6.c,q2.c,q4.c) THEN 1 WHEN q6.c NOT IN (q3.c,q2.c,q4.c) THEN 2 WHEN q2.c NOT IN (q3.c,q6.c,q4.c) THEN 3 WHEN q4.c NOT IN (q3.c,q6.c,q2.c) THEN 4 END AND DECODE(q4.c,1,q1.c-q5.c,2,q2.c-q7.c,3,q1.c-q9.c,4,q6.c-q10.c)=0 AND q5.c=DECODE(q5.c,q8.c,1,q4.c,2,q9.c,3,q7.c,4) AND q6.c=DECODE(q8.c||q8.c,q2.c||q4.c,1,q1.c||q6.c,2,q3.c||q10.c,3,q5.c||q9.c,4) AND ABS(DECODE(q8.c,1,q7.c,2,q5.c,3,q2.c,4,q10.c)-q1.c)<>1 AND DECODE(q1.c,q6.c,1,-1) =- DECODE(DECODE(q9.c,1,q6.c,2,q10.c,3,q2.c,4,q9.c),q5.c,1,-1) ) ,q3 AS (SELECT q2.*,REGEXP_COUNT(s,'1') ca,REGEXP_COUNT(s,'2') cb,REGEXP_COUNT(s,'3') cc,REGEXP_COUNT(s,'4') cd FROM q2) SELECT TRANSLATE(s,'1234','ABCD') FROM q3 WHERE c7=DECODE(LEAST(ca,cb,cc,cd),cc,1,cb,2,ca,3,cd,4) AND c10=DECODE(GREATEST(ca,cb,cc,cd)-LEAST(ca,cb,cc,cd),3,1,2,2,4,3,1,4) ; TRANSLATE(S,'1234','ABCD') ------------------------------------- BCACACDABA

SQL 的世界，精彩一如既往。

0 条评论

• ### 缓存世界中的三大问题及解决方案

Redis 经常用于系统中的缓存，可以极大地提高了系统性能和效率，但同时也带来一些问题。一个是数据一致性问题。从严格意义上讲，只要使用缓存，就会出现一致性问题，...

• ### 深入剖析 Group Replication内核的引擎特性

小编寄语 主库master与从库slave的切换不管是主动的还是被动的都需要外部干预才能进行，这与数据库内核本身是按照单机来设计的理念悉悉相关，并且数据库系统本...

• ### 运维经验：回滚段异常的特殊救急方法

? 冷菠 冷菠，资深DBA，著有《Oracle高性能自动化运维》，有近10年的数据库运维、团队管理以及培训经验。擅长数据库备份恢复、数据库性能诊断优化以及数据...

• ### java IO体系

IO流 Java中IO流分为两种，字节流和字符流，顾名思义字节流就是按照字节来读取和写入的，字符刘是按照字符来存取的；常用的文件读取用的就是字符流，在网络通信里...

• ### javaSE之如何将一个文件复制到另一个文件

1 /* 2 * (1). 文件字符输入,输出流 3 * 文件字节输入，输出流的read和write方法使用 4 * 字...

• ### 一万小时天才的相对论

长大后，你想成为什么样的人？ http://mooc.guokr.com/talk/1438/ Emilie Wapnick: Why some of us ...

• ### [Java IO]02_字节流

概要 字节流有两个核心抽象类：InputStream 和 OutputStream。所有的字节流类都继承自这两个抽象类。 InputStream 负责输入，Ou...

• ### 腾讯企业邮发送邮件 java版

背景： 由于spark streaming程序需要保证 1*24 小时，不间断运行的，为了第一时间知道程序是否出错，所以采用了出错发送邮件这一策略，而公司恰...

• ### Java 字节流

此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器

• ### C++版 - 剑指offer 面试题24：二叉搜索树BST的后序遍历序列(的判断) 题解

题目：输入一个整数数组，判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true。否则返回false。假设输入的数组的任意两个数字都互不相同。