常见面试SQL问题
一、表内容
|
Tdate |
Tresulte |
| 2019/5/9 | 胜 |
| 2019/5/9 | 胜 |
| 2019/5/9 | 负 |
| 2019/5/9 | 负 |
| 2019/5/10 | 胜 |
| 2019/5/10 | 负 |
| 2019/5/10 | 负 |
结果要生成如下
| 日期 | 胜 | 负 |
| 2019/5/9 | 2 | 2 |
| 2019/5/10 | 1 | 2 |
参考答案
考虑的是行列转换的问题,使用case when解决
create table tmp(Tdate varchar(10), Tresulte nchar(1));
insert into tmp values('2019-05-09','胜');
insert into tmp values('2019-05-09','胜');
insert into tmp values('2019-05-09','负');
insert into tmp values('2019-05-09','负');
insert into tmp values('2019-05-10','胜');
insert into tmp values('2019-05-10','负');
insert into tmp values('2019-05-10','负');
方法一
select Tdate '日期',
sum(case when Tresulte = '胜' then 1 else 0 end) '胜',
sum(case when Tresulte = '负' then 1 else 0 end) '负',
from tmp group by Tdate;
方法二
select N.Tdate '日期', N,胜, M,负
from (
select Tdate, count(*) '胜' from tmp where
Tresulte = '胜' group by Tdate ) N
inner join
(select Tdate, count(*) '负' from tmp where
Tresulte = '负' group by Tdate ) M
on N.Tdate = M.Tdate;
二、表中有A B C 三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列
参考答案
select
(case when a>b then a else b end ),
(case when b>c then b else c end)
from table_name
三、请取出tb_send表中日期(SendTime字段)为当天的所有记录。(SendTime字段为datetime型,包含日期和时间)
参考答案
select * from tb_send where datediff (dd,SendTime, getdate()) =0
四、有一张表table,里面包含三个字段:语文、数学、英语。其中有三条记录
| 语文 | 数学 | 英语 |
| 70 | 80 | 58 |
请用一条sql语句查询出这三条记录并按照以下条件显示出来:大于或等于80为优秀,大于或等于60为及格,小于60为不及格。
显示格式
| 语文 | 数学 | 英语 |
| 及格 | 优秀 | 不及格 |
参考答案
select
(case when '语文'>=80 then '优秀'
when '语文'>=60 then '及格'
else '不及格') as '语文',
(case when '数学'>=80 then '优秀'
when '数学'>=60 then '及格'
else '不及格') as '数学',
(case when '英语'>=80 then '优秀'
when '英语'>=60 then '及格'
else '不及格') as '英语',
from table
五、从table1,table2中取出如table3所列格式数据,其中table1只展示了部分数据,还有4到12月份的数据未完全展示,table3也只展示了部分数据,还有4到12月份的数据未完全展示。
table1
| 月份mon | 部门dep | 业绩yj |
| 1 | 01 | 10 |
| 1 | 02 | 10 |
| 2 | 03 | 5 |
| 2 | 02 | 8 |
| 3 | 04 | 9 |
| 3 | 03 | 8 |
table2
| 部门dep | 部门名称dname |
| 01 | 国内业务一部 |
| 02 | 国内业务二部 |
| 03 | 国内业务三部 |
| 04 | 国内业务部 |
结果如下:
table3
| 部门dep | 一月份 | 二月份 | 三月份 |
| 01 | 10 | null | null |
| 02 | 10 | 8 | null |
| 03 | null | 5 | 8 |
| 04 | null | null | 9 |
参考答案
select a.dep
sum(case when b.mon=1 then b.yj else 0 end ) as '一月份',
sum(case when b.mon=2 then b.yj else 0 end ) as '二月份',
sum(case when b.mon=3 then b.yj else 0 end ) as '三月份',
sum(case when b.mon=4 then b.yj else 0 end ) as '四月份',
sum(case when b.mon=5 then b.yj else 0 end ) as '五月份',
sum(case when b.mon=6 then b.yj else 0 end ) as '六月份',
sum(case when b.mon=7 then b.yj else 0 end ) as '七月份',
sum(case when b.mon=8 then b.yj else 0 end ) as '八月份',
sum(case when b.mon=9 then b.yj else 0 end ) as '九月份',
sum(case when b.mon=10 then b.yj else 0 end ) as '十月份',
sum(case when b.mon=11 then b.yj else 0 end ) as '十一月份',
sum(case when b.mon=12 then b.yj else 0 end ) as '十二月份'
from table2 a left join table1 b on a.dep=b.dep
六、一个表中的id有多少个记录,把所有这个id的记录查出来,并显示共有多少条记录数。
参考答案:
--方法一
select id, count(*)
from tb
group by id
having count(*)>1;
--方法二:
select *
from (select count(ID) as count from table group by ID) T
where T.count > 1
七、表形式如下:
| Year | Salary |
| 2010 | 1000 |
| 2011 | 2000 |
| 2012 | 3000 |
| 2013 | 4000 |
想得到如下形式的查询结果
| Year | Salary |
| 2010 | 1000 |
| 2011 | 3000 |
| 2012 | 6000 |
| 2013 | 10000 |
参考答案:
--连接查询
select b.Tyear, sum(a.salary) salary
from hello a, hello b
where a.Year <= b.Year
group by b.Year
--子查询
select year, (select sum(salary)
from hello as B
where B.year <= A.year)
from hello as A
常见面试SQL问题的更多相关文章
- java异常常见面试问题
java异常常见面试问题 一.java异常的理解 异常主要是处理编译期不能捕获的错误.出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性. 处理过程:产生异常状态时,如果当前的conte ...
- Hibernate的10个常见面试问题及答案
在Java J2EE方面进行面试时,常被问起的Hibernate面试问题,大多都是针对基于Web的企业级应用开发者的角色的.Hibernate框架在Java界的成功和高度的可接受性使得它成为了Java ...
- Android常见面试笔试题目
Android常见面试笔试题目 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 答:可以处理消息循环的线程,他是一个拥 ...
- SQL常见优化Sql查询性能的方法有哪些?
常见优化Sql查询性能的方法有哪些? 1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用“临时表”暂 ...
- Android开发面试经——6.常见面试官提问Android题②(更新中...)
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/fi ...
- Android开发面试经——5.常见面试官提问Android题①
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客: http://blog.csdn.net/f ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- 50个常用的笔试、面试sql语句
50个常用的笔试.面试sql语句 2009-12-17 15:05 Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,s ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
随机推荐
- centos 6.5 安装 nginx
从nginx官网下载安装包:nginx-1.8.1.tar.gz,解压 tar xvf nginx-1.8.1.tar.gz -C /usr/local 安装依赖 yum install gcc yu ...
- mac上如何搜索文件?
在Mac上如果你用会了搜索功能那绝对是个事半功倍的技巧.因为Mac本身有强大的文件索引能力, 可以帮你快速的找到你需要的文件.就好比我要找到上周修改过的word文档应该怎么办? * 使用语音命令让Si ...
- 阿里云吴天议:云原生SDWAN 应用 构建智能化云原生SDWAN生态
2019年11月16日 SDWAN 大会在北京正式召开.阿里云网络资深产品专家吴天议先生继阿里云网络研究员祝顺民先生发表了对云原生SDWAN的进化与展望之后(原文请见https://bit.ly/2K ...
- Android逆向之旅---静态分析技术来破解Apk
一.前言 从这篇文章开始我们开始我们的破解之路,之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解,那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,And ...
- stack1顺序栈
顺序栈 #include<iostream> using namespace std; #define increasesize 10 template <class Object& ...
- ORACLE修改表字段顺序
1.若'GYZL_BZPWL_TB' 为要修改的表名,注意表名一定要大写!此句可以获取表的id.select object_id from all_objects where object_name= ...
- php匿名函数和闭包的理解
PHP匿名函数和闭包使用的句法与普通函数相同,但匿名函和闭包数其实是伪装成函数的对象. 匿名函数:就是没有名称的函数.匿名函数可以赋值给变量,对象传递.不过匿名函数仍是函数,因此可以调用,还可以传入参 ...
- HDU 4321 Arcane Numbers 2
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4321 ----------------------------------------------- ...
- SSH 的原理和实践
最近自己在学习使用SSH,现将自己理解的SSH原理和实践SSH的操作写成一篇博客,以供日后查看. 一.SSH是什么?为什么会出现SSH? SSH英文全称是Secure Shell,即安全外壳.首先SS ...
- 百度地图api设置点的自定义图标不显示
百度地图api设置点的设置代码为: var myIcon = new BMap.Icon(): 所以首先要找到这行代码,并在括号中加上图片信息: var myIcon = new BMap.Icon( ...