mysql - 最小缺失值查询
初始化数据
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 - 最小缺失值查询的更多相关文章
- MySQL知识树-查询语句
在日常的web应用开发过程中,一般会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇随笔我们就来一起看看MySQL查询知识相关的树是什么 ...
- mysql笔记03 查询性能优化
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
- sql查找最小缺失值与重用被删除的键(转载)
转载自:http://blog.csdn.net/yanghua_kobe/article/details/6262550 在数据处理时,我们经常会使用一些“自增”的插入方式来处理数据.比如学生学号: ...
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...
- MySQL数据表查询操作
准语法结构:编写DQL时一定要严格按照此语法的顺序来实现!/* SELECT [ALL | DISTINCT] ALL表示查询出所有的内容 DISTINCT 去重 {* | 表名.* | 表名.字段名 ...
- MySQL数据表查询操
准语法结构:编写DQL时一定要严格按照此语法的顺序来实现!/* SELECT [ALL | DISTINCT] ALL表示查询出所有的内容 DISTINCT 去重 {* | 表名.* | 表名.字段名 ...
- MySQL慢日志查询分析方法与工具
MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...
- MySQL多表查询、事务、DCL:内含mysql如果忘记密码解决方案
MySQL多表查询.事务.DCL 多表查询 * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id ...
- MySQL设置慢查询
MySQL的慢查询日志是用来记录在MySQL中响应时间超过阀值的语句,则会被记录到慢查询日志中(运行时间超过long_query_time值的SQL语句): 慢查询相关参数: slow_query ...
随机推荐
- 新冲刺Sprint3(第一天)
一.Sprint介绍 sprint2已经结束了,现在准备进行新一轮的冲刺--sprint3.现在简单说下sprint3的情况,正在进行的有更新商品图片和浏览商家相关信息,还有就是APP测滑栏的完善.准 ...
- codeforces194b
link:http://codeforces.com/problemset/problem/334/B #include <iostream> #include <cstdio> ...
- Alpha版本项目展示
成员简介 谷大鑫: 热爱编程,技术狂魔,可以对感兴趣的技术钻研到茶饭不思,队伍的技术中坚.标签:整个队伍里最靠谱的人. 个人博客:http://www.cnblogs.com/nrm1/ 杨金键: 未 ...
- 《C与指针》第七章练习
本章问题 1.具有空函数体的函数可以作为存根使用,你如何对这类函数进行修改,使其更有用? answer:Have the stub(存根) print out a message when it is ...
- Android学习六:Socket 使用
1socket的作用 通过http去获取服务器的数据在有些情况下是行不通的,所有使用socket与服务器通信也是必须掌握的 2.代码 好了上代码,代码中有解释,首先是简单的服务端代码 package ...
- 干货:结合Scikit-learn介绍几种常用的特征选择方法
原文 http://dataunion.org/14072.html 主题 特征选择 scikit-learn 作者: Edwin Jarvis 特征选择(排序)对于数据科学家.机器学习从业者来说非 ...
- javascript中的对象之间继承关系
相信每个学习过其他语言的同学再去学习JavaScript时就会感觉到诸多的不适应,这真是一个颠覆我们以前的编程思想的一门语言,先不要说它的各种数据类型以及表达式的不同了,最让我们头疼,恐怕就是面向对象 ...
- Reflector 反编译 .NET文件后修复
反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode. ...
- linux下socket编程-进程间通信
一.什么是Socket Socket接口是TCP/IP网络通信的API,Socket接口定义了许多函数或例程,可以用它们来开发TCP/IP网络上的应用程序. Socket类型有两种:流式Socket ...
- <mvc:annotation-driven/>与<mvc:default-servlet-handler/>之间的一个问题
<mvc:annotation-driven/>与<mvc:default-servlet-handler/>之间的一个问题 在做项目的时候,我希望静态资源由WEB服务器默认的 ...