初始化数据

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. 新冲刺Sprint3(第一天)

    一.Sprint介绍 sprint2已经结束了,现在准备进行新一轮的冲刺--sprint3.现在简单说下sprint3的情况,正在进行的有更新商品图片和浏览商家相关信息,还有就是APP测滑栏的完善.准 ...

  2. codeforces194b

    link:http://codeforces.com/problemset/problem/334/B #include <iostream> #include <cstdio> ...

  3. Alpha版本项目展示

    成员简介 谷大鑫: 热爱编程,技术狂魔,可以对感兴趣的技术钻研到茶饭不思,队伍的技术中坚.标签:整个队伍里最靠谱的人. 个人博客:http://www.cnblogs.com/nrm1/ 杨金键: 未 ...

  4. 《C与指针》第七章练习

    本章问题 1.具有空函数体的函数可以作为存根使用,你如何对这类函数进行修改,使其更有用? answer:Have the stub(存根) print out a message when it is ...

  5. Android学习六:Socket 使用

    1socket的作用 通过http去获取服务器的数据在有些情况下是行不通的,所有使用socket与服务器通信也是必须掌握的 2.代码 好了上代码,代码中有解释,首先是简单的服务端代码 package ...

  6. 干货:结合Scikit-learn介绍几种常用的特征选择方法

    原文  http://dataunion.org/14072.html 主题 特征选择 scikit-learn 作者: Edwin Jarvis 特征选择(排序)对于数据科学家.机器学习从业者来说非 ...

  7. javascript中的对象之间继承关系

    相信每个学习过其他语言的同学再去学习JavaScript时就会感觉到诸多的不适应,这真是一个颠覆我们以前的编程思想的一门语言,先不要说它的各种数据类型以及表达式的不同了,最让我们头疼,恐怕就是面向对象 ...

  8. Reflector 反编译 .NET文件后修复

    反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode. ...

  9. linux下socket编程-进程间通信

    一.什么是Socket Socket接口是TCP/IP网络通信的API,Socket接口定义了许多函数或例程,可以用它们来开发TCP/IP网络上的应用程序. Socket类型有两种:流式Socket ...

  10. <mvc:annotation-driven/>与<mvc:default-servlet-handler/>之间的一个问题

    <mvc:annotation-driven/>与<mvc:default-servlet-handler/>之间的一个问题 在做项目的时候,我希望静态资源由WEB服务器默认的 ...