苏旭晖,网名 newkid,ITPUB 开发版资深版主,SQL开发专家

本文是继 杨长老 刑侦高考:如何用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

如果用1234取代ABCD,最后再变回来,那么中间有些逻辑判断可以用算术,代码就更简单

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 的世界,精彩一如既往。


资源下载

关注公众号:数据和云(OraNews)回复关键字获取

2018DTCC , 数据库大会PPT

2017DTC,2017 DTC 大会 PPT

DBALIFE ,“DBA 的一天”海报

DBA04 ,DBA 手记4 电子书

122ARCH ,Oracle 12.2体系结构图

2017OOW ,Oracle OpenWorld 资料

PRELECTION ,大讲堂讲师课程资料

近期文章

仅仅使用AWR做报告? 性能优化还未入门

实战课堂:一则CPU 100%的故障分析

杨廷琨:如何编写高效SQL(含PPT)

一份高达555页的技术PPT会是什么样子?

大象起舞:用PostgreSQL解海盗分金问题

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

  1. 高手过招:用SQL解决环环相扣的刑侦推理问题(罗海雄版本)

    关注我们获得更多精彩内容! 本文是继 杨长老 刑侦高考:如何用SQL解决环环相扣的刑侦推理问题  之后(点击阅读原文查看历史信息),罗海雄老师提供了一个带注释的版本,希望初学者也能够直接看懂,不仅仅是 ...

  2. 刑侦高考:如何用SQL解决环环相扣的刑侦推理问题

    关注我们获得更多精彩内容! 高考期间看到一个朋友在朋友圈里面贴了个图,上面是2018年刑侦科推理试题,看了一下题目,这些题目都是彼此依赖,很难找到一个题目作为入手点可以进一步分析,因此可能需要用纸笔配 ...

  3. 软件开发顶尖高手的杀手锏SQL语句

                  软件开发顶尖高手的杀手锏SQL语句                                                                      ...

  4. 特仑苏VS金典,解读高手过招

    特仑苏VS金典,解读高手过招 2005年蒙牛乳业推出了旗下高端品牌"特仑苏",就此拉开了国内液态奶产品升级的帷幕.作为蒙牛的老对手,伊利自然不甘示弱,随后以"金典&quo ...

  5. SQL反模式笔记17——用一条sql解决复杂问题

    目标:检查sql查询次数 反模式:试图用一条sql解决复杂问题 结果是:性能很低,而且往往得到了一个笛卡尔积. 解决方案:分而治之 用多个sql得到数据,再进行整合.或者union多个sql的结果. ...

  6. P2575 高手过招

    P2575 高手过招 题意: AKN玩游戏玩累了,于是他开始和同伴下棋了,玩的是跳棋!对手是wwx!这两位上古神遇在一起下棋,使得棋局变得玄幻莫测,高手过招,必有一赢,他们都将用最佳策略下棋,现在给你 ...

  7. 创建存储过程时出现的This function has none of DETERMINISTIC, NO SQL解决办法

    This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): This function ...

  8. This function has none of DETERMINISTIC, NO SQL解决办法

    This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): This function ...

  9. 那些真正有用的经验,都是和高手过招换来的

    很多人都会通过各种手段,制造生意繁荣的假象,比如年底了小老板都喜提二手豪车,为的就是能压供应商的尾款. 很多加盟店,玩命请人排队,为的就是拍几段生意爆火的宣传片,最后收割一波韭菜. 电商喜欢刷数据,微 ...

最新文章

  1. java which语句,java入门之表达式、语句、块
  2. myeclipse 遇到的一些问题及解决方案
  3. 简单介绍Lua中的变量与赋值方法
  4. sql08 访问接口没有oraoledb_状态接口的实现方式讨论
  5. SAP PM 初级系列7 - 定义工厂区域
  6. python蓝牙上位机开发_python做上位机 - osc_2frv0wjp的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. java jlist_Swing开发之JList篇
  8. raspberry pi_Raspberry Pi,CNC铣削,WTF,Cypht,HomeBank,Wekan等的使用方法
  9. spring3: AOP 之 6.2 AOP的HelloWorld
  10. WPF .NET 4.0 OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)) BUG解决
  11. 前端基础知识总结---HTML篇
  12. unity3d 锁定鼠标
  13. 莺尾花数据(画出不同分类器的ROC曲线)
  14. AS运行安装失败,真机提示“软件包似乎无效”问题
  15. scrapy爬虫实例:凤凰网
  16. 终端代理以及git加速
  17. 安装配置CentOS
  18. 计算机d盘变为raw,d盘文件系统raw 硬盘变成raw格式怎么办
  19. win10 pxe 安装linux,win10+TPLINK,用PXE安装redhat系统
  20. 7天酒店斩获五洲钻石奖“年度投资价值酒店连锁品牌” 打造酒店投资极致性价比

热门文章

  1. (17)HTML标准文档流
  2. 前端:JS/16/JavaScript简介,lt;script标记,常用的两个客户端输出方法,JS注释,JS变量(声明,命名规则,赋值),变量的数据类型(数值型,字符型)
  3. 使用jquery版本的viewer.js图片更新的问题
  4. CSS 框的外观 outline属性
  5. es6 实例:模块的 Singleton 模式
  6. Java跨域请求cooking共享,关于HTML5中的sessionStorage和localStorage
  7. 套用表格格式转化为普通区域_学会修改表格格式,让你的报表更美观
  8. python原理及代码_lightgbm原理以及Python代码
  9. 12v电源正负极区分_解决冬天车辆无法启动的难题——车用应急启动电源选购要点及评测...
  10. 前端自动化工具gulp入门基础