疑难杂症 - SQL语句整理
一、关联子查询-查日期最新列
前天在工作中遇到一条非常有用的SQL语句,想了好久愣是没搞出来。今天将这个问题模拟出来:先看表

需求是,对于每个人,仅显示时间最新的那一条记录。
答案如下:
select * from record as a
where not exists (select null from record as b where a.Name = b.Name and a.CreateTime < b.CreateTime)
结果如下:

这个问题的关键难点在于,既要去除重复,又要显示多个列。这样一来distinct就无效了,groupby又无效了。
写成上面的样子,可能比较难看,但是写成下面这个样子应该就看得懂了:
select * from record as a
where not exists
(select * from record as b where a.Name = b.Name and b.CreateTime > a.CreateTime)
整条SQL语句的意思可以描述为,查询表a的数据,当名字相同且存在时间更加新的,则不要这条(一直排除到时间是最新的)。exists运算符,只关注子SQL有没有结果集返回,因此在exists里select * 与 select null意义一样,也就是说,如果名字相等,且有创建时间比较新的,则不要这条,直到最新的。
sql查询语句以select关键字开始,由各种字句组成。select语句的完整语法较复杂,常见的sql查询语句的语法结构如下。
关联子查询只是此问题的其中一个解法,更多的解决方案在这个地址有:http://www.cnblogs.com/kissdodog/p/3365789.html
二、distinct关键字用于聚合函数中
distinct关键字也能够用于聚合函数里面,意为在聚合之前将所有的重复行先排除,所以返回的结果会更少:
select count(distinct person_name)
三、CASE...WHEN基于列的逻辑表达式
关于这个东西,特别写了篇文章,地址如下:http://www.cnblogs.com/kissdodog/p/3154371.html
现在来写个实例:先给出一张表:

要求查出以下信息:

SQL语句如下:
select Team,Rq, sum(case when winlose='胜' then 1 else 0 end) as 胜,sum(case when winlose='负' then 1 else 0 end) as 负
from test
group by Rq,Team
having Team = '曼联'
再来一个,一张表只有Id,Sex两个字段,要求用一条SQL语句将Sex字段的'男'变'女','女'变'男'。
update table_1
set sex = (case when sex='男' then '女' when sex='女' then '男' end)
执行完SQL语句后,结果如下:

再来一个有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
SQL语句如下:

select Id,
(case
when chinese >= 80 then '优秀'
when chinese >= 60 then '及格'
else '不及格'
end) as 语文,
(case
when math >= 80 then '优秀'
when math >= 60 then '及格'
else '不及格'
end) as 数学,
(case
when english >= 80 then '优秀'
when english >= 60 then '及格'
else '不及格'
end) as 英语
from fenshu

疑难杂症 - SQL语句整理的更多相关文章
- 一个项目涉及到的50个Sql语句(整理版)
/* 标题:一个项目涉及到的50个Sql语句(整理版) 说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句. */ --1.学生表Student(S,Sname,Sage,Sse ...
- 常用sql语句整理:mysql
## 常用sql语句整理:mysql1. 增- 增加一张表```CREATE TABLE `table_name`( ... )ENGINE=InnoDB DEFAULT CHARSET=utf8 ...
- Oracle数据库常用的Sql语句整理
Oracle数据库常用的Sql语句整理 查看当前用户的缺省表空间 : select username,default_tablespace from user_users; 2.查看用户下所有的表 : ...
- 常用的一些SQL语句整理,也许有你想要的。
本篇文章是对一些常用的sql语句进行了总结与分析,需要的朋友参考下,也许会有你需要的. 1.SQL行列转换 问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 ...
- SQL语句整理(二) 数据定义语言DDL
前言: 这是我学数据库时整理的学习资料,基本上包括了所以的SQL语句的知识点. 我的教材是人大王珊老师的<数据库系统概论>. 因为是手打的,所以会用一些细节打错了,但都挺明显也不多(考完试 ...
- SQL语句整理(一) 数据库查询语言DQL
前言: 这是我学数据库时整理的学习资料,基本上包括了所以的SQL语句的知识点. 我的教材是人大王珊老师的<数据库系统概论>. 因为是手打的,所以会用一些细节打错了,但都挺明显也不多(考完试 ...
- EBS系统管理常用SQL语句整理汇总(参考网上资料&其他人博客)
--1查找系统用户基本信息 SELECT user_id, user_name, description, employeE_id, person_party_id FROM fnd_user; -- ...
- MySQL的一些常用的SQL语句整理
安装MySQL有两种的方式,一种是解压版本,但是需要配置环境变量,相对而言比较麻烦.所以我们一般采取第二种方式,那就是到MySQL的官网上下载安装版.这样就会省去很多麻烦,在这里我就不再详细的介绍具体 ...
- MSSQL注入常用SQL语句整理
很多情况下使用工具对mssql注入并不完善,所以我们就需要手工注入,一下是本人收集的一些mssql的sql语句. 手工MSSQL注入常用SQL语句 and exists (select * from ...
随机推荐
- [转]新兵训练营系列课程——平台RPC框架介绍
原文:http://weibo.com/p/1001643875439147097368 课程大纲 1.RPC简介 1.1 什么是RPC 1.2 RPC与其他远程调用方式比较 2.Motan RPC框 ...
- Dynamic CRM 2013学习笔记(三十)Linq使用报错 A proxy type with the name account has been defined by another assembly
在CRM中使用linq时,有时会报这个错误: A proxy type with the name account has been defined by another assembly. Curr ...
- “System.Web.UI.WebControls.Literal”不允许使用子控件
今天在写下面的代码时遭遇错误——“System.Web.UI.WebControls.Literal”不允许使用子控件('System.Web.UI.WebControls.Literal' does ...
- Django表单验证
从前端提交的各种数据可能存缺少必要字段以及包含非法数据等问题, 并且通常需要进行类型转换后才可以交由业务逻辑处理. 我们当然可以在控制器(Django的views函数)中完成这些工作, 但是这样会使控 ...
- 图书馆管理系统 SRS文档
图书馆管理系统 SRS文档 编写人:魏晓 日期:2015年05月27日 1介绍 1.1编写目的 图书管理系统需求规格说明书是为了让系统的涉众就该系统的需求达成一致认可,明确该系统的需求,为后续的开发工 ...
- C++ WIN32控制台异常关闭回调函数
/* This is an example of the SetConsoleCtrlHandler function that is used to install a control handle ...
- paip.杀不死进程的原因--僵尸进程的解决.txt
paip.杀不死进程的原因--僵尸进程的解决.txt 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...
- atitit.架构设计---方法调用结果使用异常还是返回值
atitit.架构设计---方法调用结果使用异常还是返回值 1. 应该返回BOOL类型还是异常 1 2. 最终会有四种状况,抛出异常.返回特殊值.阻塞.超时 1 3. 异常的优缺点点 1 4. jav ...
- 我和Java的故事-------第1弹
前言:兴趣是学习任何新知识最好的老师 --------------------------------------------------------------------------------- ...
- Linux内核如何装载和启动一个可执行程序
exec 本节我们分析exec系统调用的执行过程. exec一般和fork调用,常规用法是fork出一个子进程,然后在子进程中执行exec,替换为新的代码. do_exec 跟上次的fork类似,这里 ...