一、关联子查询-查日期最新列
前天在工作中遇到一条非常有用的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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现