初始化数据

DROP TABLE IF EXISTS X;
CREATE TABLE X(
a INT UNSIGNED PRIMARY KEY,
b CHAR(1) NOT NULL )ENGINE=INNODB; INSERT INTO X SELECT 3, 'a';
INSERT INTO X SELECT 4, 'b';
INSERT INTO X SELECT 6, 'c';
INSERT INTO X SELECT 7, 'd'; SELECT * FROM X;

假设a列从1开始,对于当前表中的数据3、4、6、7,查询应该返回1。如果当前表中的数据位1、2、3、4、6、7,查询结果应该返回5。

最小缺失值可以通过如下的表达式来解决:

SELECT
CASE
WHEN NOT EXISTS(SELECT * FROM X WHERE a=1) THEN 1
ELSE
(.......... 返回最小缺失值的子查询 ..........)
END AS missing;

如果表中不存在列a的值为1的情况,则返回1,反则返回子查询的结果,该子查询返回最小缺失值。

下面是通过子查询得到最小缺失值的过程:

SELECT MIN(a)+1 AS missing
FROM X A
WHERE NOT EXISTS(
SELECT * FROM X B WHERE A.a+1=B.a
);

整个解决方案的sql如下:

SELECT
CASE
WHEN NOT EXISTS(SELECT * FROM X WHERE a=1) THEN 1
ELSE
(SELECT MIN(a)+1 AS missing
FROM X A
WHERE NOT EXISTS(
SELECT * FROM X B WHERE A.a+1=B.a
))
END AS missing;

如果对表X执行上述语句会得到1。若按如下方式向类a插入值1和后后,重新运行结果,则会得到5。

# 插入1、2
INSERT INTO X SELECT 1, 'z';
INSERT INTO X SELECT 2, 'x';

对最小缺失值进行补缺操作

INSERT INTO X
SELECT
CASE
WHEN NOT EXISTS(SELECT * FROM X WHERE a=1) THEN 1
ELSE
(SELECT MIN(a)+1 AS missing
FROM X A
WHERE NOT EXISTS(
SELECT * FROM X B WHERE A.a+1=B.a
))
END AS missing, 'p';

mysql - 最小缺失值查询的更多相关文章

  1. MySQL知识树-查询语句

    在日常的web应用开发过程中,一般会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇随笔我们就来一起看看MySQL查询知识相关的树是什么 ...

  2. mysql笔记03 查询性能优化

    查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...

  3. sql查找最小缺失值与重用被删除的键(转载)

    转载自:http://blog.csdn.net/yanghua_kobe/article/details/6262550 在数据处理时,我们经常会使用一些“自增”的插入方式来处理数据.比如学生学号: ...

  4. MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询

    本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...

  5. MySQL数据表查询操作

    准语法结构:编写DQL时一定要严格按照此语法的顺序来实现!/* SELECT [ALL | DISTINCT] ALL表示查询出所有的内容 DISTINCT 去重 {* | 表名.* | 表名.字段名 ...

  6. MySQL数据表查询操

    准语法结构:编写DQL时一定要严格按照此语法的顺序来实现!/* SELECT [ALL | DISTINCT] ALL表示查询出所有的内容 DISTINCT 去重 {* | 表名.* | 表名.字段名 ...

  7. MySQL慢日志查询分析方法与工具

    MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...

  8. MySQL多表查询、事务、DCL:内含mysql如果忘记密码解决方案

    MySQL多表查询.事务.DCL 多表查询 * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id ...

  9. MySQL设置慢查询

    MySQL的慢查询日志是用来记录在MySQL中响应时间超过阀值的语句,则会被记录到慢查询日志中(运行时间超过long_query_time值的SQL语句):   慢查询相关参数: slow_query ...

随机推荐

  1. 腾讯优测-优社区干货精选 |  那些年,我们在Android机型适配上遇到的坑之Camera拍照时快门咔嚓声

    文/腾讯优测研发工程师 吴宇焕 优测小优有话说: android机型适配的坑自然是不少,不想掉坑快来优测优社区~ 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想 ...

  2. HDU 5950 矩阵快速幂

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. MongoDB学习笔记二:创建、更新及删除文档

    插入并保存文档 对目标集使用insert方法插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个&q ...

  4. 基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

    自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到很多同行的关注和支持,不过上一篇主要是介绍一个总体的界面效果和思路,本系列的文章将逐步介绍其中的 ...

  5. 基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍

    在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章会随着技术的探讨一直写下去,不过这个系列的文章,到这里做一个总结,展示一下整体基于MVC4+Ea ...

  6. 使Maven 2在package、install等阶段跳过运行Test的配置

    方法1: To skip running the tests for a particular project, set the skipTests property to true.<proj ...

  7. Redis入门(一)系统安装

    硬件环境:Thinkpad T450,Intel i5-5200U CPU @ 2.20GHz × 4 ,8GB RAM 软件环境: ubuntu 14.04.4 (trusty) 一.软件安装 #w ...

  8. SQL 表 和字符串 互转 (行列互转)

    -- 表转字符串 )) ,,'') --字符串转表 ),)) ,) )) AS BEGIN DECLARE @StartIndex INT --开始查找的位置 DECLARE @FindIndex I ...

  9. CrashHandler: java.lang.NullPointerException

    08-29 20:33:47.305 20636-20636/com.tongyan.subway.inspect D/AndroidRuntime: Shutting down VM 08-29 2 ...

  10. 伯克利包过滤(Berkeley Packet Filter,BPF)语言

    libpcap支持一种功能非常强大的过滤语言——“伯克利包过滤”语法.使用BPF过滤规则,你可以确定该获取和检查哪些流量,忽略哪些流量.BPF让你能够通过比较第2.3.4层协议中各个数据字段值的方法对 ...