DECODE函数的奇怪用法的例子

背景:你们公司超级注重企业文化,要求大家要做好孩子多读书,公司老板叫王富贵,老板娘叫张翠花,另有员工若干人。

需求:领导要求搞一个员工读书记录排名,展示出每个员工所读过的书都有啥?

分析:从这样及其常见的一句话需求描述中,聪明的小趴菜你肯定知道,老板肯定要排在最前面,然后应该是老板娘,剩余的普通员工按照姓名首字母排等等这些隐藏的需求。

方案:

首先给出数据建表脚本(Oracle)

CREATE TABLE T_BOOK_RECORD (
    ID VARCHAR2(100) NOT NULL,
    USER_NAME VARCHAR2(100) NOT NULL,
    BOOK_NAME VARCHAR2(100) NOT NULL,
    CONSTRAINT T_BOOK_RECORD_PK PRIMARY KEY (ID)
);
COMMENT ON TABLE T_BOOK_RECORD IS '阅读记录';
COMMENT ON COLUMN T_BOOK_RECORD.ID IS '主键';
COMMENT ON COLUMN T_BOOK_RECORD.USER_NAME IS '人员姓名';
COMMENT ON COLUMN T_BOOK_RECORD.BOOK_NAME IS '书籍名称';

然后给出灵魂数据脚本

INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('1', '王富贵', '《如何合法罚款》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('2', '李加成', '《舔狗的自我修养》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('3', '孙正易', '《囚徒健身插图版》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('4', '王丝匆', '《穷爸爸富爸爸》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('5', '赵伪', '《资本游戏》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('6', '王富贵', '《人家大爱-996福报》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('7', '张翠花', '《拴住老公的胃》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('8', '张翠花', '《老板娘不是老板的娘》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('9', '李加成', '《老子明天不上班》');
INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('10', '王丝匆', '《投胎那些事》');

你最开始可能想到的方法

  • 首先,按照姓名排序查出所有数据
SELECT USER_NAME ,BOOK_NAME FROM T_BOOK_RECORD ORDER BY NLSSORT(USER_NAME,'NLS_SORT = SCHINESE_PINYIN_M')

得到结果如下:

DECODE函数的奇怪用法的例子
  • 然后,通过代码筛选出老板王富贵和老板娘张翠花的数据依次塞到一个集合里
public List list(){
    List boss = new ArrayList<>();
    List bossWife = new ArrayList<>();
    List nobody = new ArrayList<>();
    for(BookRecord br : list){
        if ("王富贵".equals(br.getUserName())){
            boss.add(br);
        }else if ("张翠花".equals(br.getUserName())){
            bossWife.add(br);
        }else {
            nobody.add(br);
        }
    }
    boss.addAll(bossWife);
    boss.addAll(nobody);

    return boss;
}

其实也可以一个并不复杂的SQL直接实现

SELECT * FROM T_BOOK_RECORD ORDER BY DECODE( USER_NAME , ‘王富贵’ , 1 , ‘张翠花’ , 2 ) ,NLSSORT( USER_NAME , ‘NLS_SORT = SCHINESE_PINYIN_M ‘ )

得到结果如下:

DECODE函数的奇怪用法的例子

这里主要有以下几个知识点:

  • 字段按照拼音字母排序
SELECT * FROM T_BOOK_RECORD ORDER BY NLSSORT(USER_NAME,'NLS_SORT = SCHINESE_PINYIN_M')
  • 动态处理函数decode(),这个有点类似三目运算表达式

DECODE(USER_NAME,’王富贵’,1,’张翠花’,2),这个代表,如果USER_NAME=’王富贵’,函数返回1,如果USER_NAME=’张翠花’,函数返回2,这个函数的返回值是优先级最高的排序条件

Original: https://www.cnblogs.com/java-bhp/p/16419036.html
Author: 包海鹏-郑州JAVA
Title: DECODE函数的奇怪用法的例子

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589021/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • vue项目启动报错 Error: spawn cmd ENOENT

    一、yarn serve 启动vue项目,如下报错: `html;gutter:true;Type checking in progress… App running …

    Java 2023年6月15日
    097
  • 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第6版)

    第6版重大更新震撼发布,功能更加强大,速度过来围观,这次版本更新如下: 1、新增测试数据库连接。2、标准模板新增C#标准模板。3、字段转换设置新增需要在某类型上添加的注解配置。4、…

    Java 2023年6月9日
    062
  • Core Java 总结(字符和字符串类问题)

    所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 字符,字符串类问题…

    Java 2023年5月29日
    082
  • Java面向对象之各种变量详解

    在Java中一定有很多变量让大家头疼,成员变量、类变量、局部变量等等,今天就来分别认识认识他们吧! Java面向对象之各种变量详解 前言 在 Java语言中, 根据定义变量位置的不…

    Java 2023年6月7日
    064
  • aardio + PowerShell 可视化快速开发独立 EXE 桌面程序

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月16日
    058
  • Mysql索引数据结构详解(1)

    慢查询解决:使用索引 索引是帮助Mysql高效获取数据的排好序的数据结构 常见的存储数据结构: 二叉树不适合单边增长的数据 红黑树会自动平衡父节点两边的节点数 Mysql底层用的是…

    Java 2023年6月13日
    069
  • 浅尝Spring注解开发_Servlet3.0与SpringMVC

    浅尝Spring注解开发_Servlet 3.0 与 SpringMVC 浅尝Spring注解开发,基于Spring 4.3.12Servlet3.0新增了注解支持、异步处理,可以…

    Java 2023年6月5日
    077
  • Docker:Docker基础知识

    docker是什么 docker 是一个基于Go语言的开源应用容器引擎。 docker可以让开发者打包自己的应用到一个轻量级、可移植的容器中,实现容器化。 不同容器内的程序不会相互…

    Java 2023年6月7日
    058
  • day40-网络编程02

    Java网络编程02 4.TCP网络通信编程 基本介绍 基于客户端–服务端的网络通信 底层使用的是TCP/IP协议 应用场景举例:客户端发送数据,服务端接收并显示控制台…

    Java 2023年6月15日
    074
  • Java程序员的macOS手册

    针对Java程序员而言,开发服务器端程序,程序的运行环境是Linux,在Mac OS X这个Unix上面开发,其实很方便。 本技术专栏帮忙Java程序员,搭建工作环境,如JDK、M…

    Java 2023年5月29日
    054
  • 毕业就在小公司躺了3年,面试大厂发现,发现不会分布式没人要…

    之前写了一篇秒杀系统的文章,最后给自己埋了分布式事务的坑,然后很多读者就要求我去写分布式事务,那作为程序员届的暖男,我一向是有求必应的,就算是不睡觉我都要写给你们看的! 因为分布式…

    Java 2023年6月9日
    085
  • 一、对象与类

    1 类的三种关系:use, has, is 2 封装:数据域私有,即隐藏数据的实现方式,只提供方法去操作。所有的使用者调用即可而不需要关心实现方法的都可以称为封装。 3 java的…

    Java 2023年6月16日
    0113
  • Druid学习之查询语法

    写在前面 最近一段时间都在做druid实时数据查询的工作,本文简单将官网上的英文文档加上自己的理解翻译成中文,同时将自己遇到的问题及解决方法list下,防止遗忘。 本文的demo示…

    Java 2023年6月13日
    085
  • SpringCloud入门简述

    1、微服务简述 ​ 微服务,是一个小型的服务,也是一种设计理念,将一个大型繁杂的系统拆分为多个小型的服务,进行独立部署,这些服务在独立进程中运行,通过特定的协议进行通信 ​ 优点:…

    Java 2023年6月13日
    071
  • 通过反射获取某个对象下的属性值,或通过父类获取

    java;collapse:true;;gutter:false; import org.slf4j.Logger; import org.slf4j.LoggerFactory;…

    Java 2023年6月6日
    070
  • java int类型底层存储&原码&反码&补码

    java的int类型 Java的原始类型里没有无符号类型,c语言int类型表示有符号整型,unsigned int无符号整型 int占4个字节,每个字节8位,占32位,取值范围 -…

    Java 2023年5月29日
    051
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球