疑难杂症 - 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

时间: 2024-10-11 22:10:01

疑难杂症 - SQL语句整理的相关文章

个项目涉及到的50个Sql语句(整理版)

/*标题:一个项目涉及到的50个Sql语句(整理版)作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)时间:2010-05-10地点:重庆航天职业学院说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句.问题及描述:--1.学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表 Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师

一个项目涉及到的50个Sql语句(整理版)

/* 标题:一个项目涉及到的50个Sql语句(整理版) 说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句. */ --1.学生表Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(C,Cname,T) --C --课程编号,Cname 课程名称,T 教师编号--3.教师表 Teacher(T,Tname) --T 教师编号,Tname 教师姓名 --4.成绩表

把工作这段期间sql server 中需要用的sql语句整理了一下

前些日子sql用到哪里写到哪里,乱七八糟,今天整理了一下,以作备份(虽然开通博客已经八个月了,但是今天还是第一次发表博文,好紧张啊~~) --2014.08.27号整理sql语句 1:进入数据库use [数据库名] eg: use [dev] 2:创建表create table 表名([ID] int identity(1,1) primary key,[列名] 数据类型 约束 ,)eg:create table atblTest1([ID] int identity(1,1) primary

Oracle数据库常用的Sql语句整理

查看当前用户的缺省表空间 : select username,default_tablespace from user_users; 2.查看用户下所有的表 : select * from user_tables; 3.创建表空间 :CREATE TABLESPACE invocie DATAFILE '/data/InvoiceData/invoicebak/invocie_01.dbf' Size 4096M AUTOEXTEND OFF: CREATE TABLESPACE "MIS_DA

MyBatis常用SQL语句整理笔记

最近使用Mybatis作为持久层框架,自然/动态sql写得也比较多了,最常见的就是在查询语句中使用if标签来动态地改变过滤条件. Mybatis强大特性之一就是它的动态sql,免除了拼接sql带来的各种麻烦. 在项目开发过程中,常见的和不常见的问题都有碰到过,所以在这总结一下. if choose(when,otherwise) trim(where,set) foreach 1.通常用于多条件组合查询 <select id="productId" parameterType=&

sql语句整理

(1) 数据记录筛选:sql="select * from 数据表 where字段名=字段值 order by字段名[desc]"(按某个字段值降序排列.默认升序ASC)sql="select * from 数据表 where字段名like '%字段值%' order by 字段名 [desc]"sql="select top 10 * from 数据表 where字段名=字段值 order by 字段名 [desc]"sql="sel

SQL语句整理1

//CASE 的用法,以及as SELECT CASE RegType WHEN 1 THEN '月卡' WHEN 0 THEN '周卡' WHEN 2 THEN '季度卡' WHEN 3 THEN '年卡' ELSE '未知卡类型' END AS '卡类型' FROM SL_Register_Info Left join用法 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table

转:ibatis常用16条SQL语句

1.输入参数为单个值 <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" parameterClass="long"> delete from MemberAccessLog where accessTimestamp = #value# </delete> <delete id="com.fashionfree.stat.acces

整理的一些简单的sql语句

前几天整理了简单的sql语句,不太全,,会慢慢整理的. 有什么不对的地方,请指正,因为我也在用这些命令. 谢谢! create database 库名:创建数据库 show databases; 查看数据库 use 库名: 进入去数据库 show tables:查看表的数据 drop database 库名:删除数据库 create table epm[表名](ename[列名] varchar(10),sal[列名]date,aaa[列名]int(2)):创建表 desc 表名:查看表的内容