sql - 面试
一,关于 group by
表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
需要生成结果为:
Fday | 胜 | 负 |
2005/5/9 | 2 | 2 |
2005/5/10 | 1 | 2 |
建表:
create table t_com(Fday varchar(10),Fwin_lose nchar(1))
insert into t_com values('2005-05-09','胜')
insert into t_com values('2005-05-09','胜')
insert into t_com values('2005-05-09','负')
insert into t_com values('2005-05-09','负')
insert into t_com values('2005-05-10','胜')
insert into t_com values('2005-05-10','负')
insert into t_com values('2005-05-10','负')
答案:
--解释:sum中的then后的数字表示'代表几',如'1'表示'出现一个记录,基数加1'. select Fday [日期],
SUM(case when Fwin_lose='胜' then 1 else 0 end) [胜],
SUM(case when Fwin_lose='负' then 1 else 0 end) [负]
from t_com group by Fday
二,关于 case 选择
题目:表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列,否则选择B列;当B列大于C列时选择B列,否则选择C列。
创建表:
create table t_selmax(FA int, FB int, FC int)
insert into t_selmax values(1, 2, 3)
insert into t_selmax values(3, 2, 0)
insert into t_selmax values(11, 4, 3)
insert into t_selmax values(1, 12, 31)
实现结果:
a_b | b_c |
2 | 3 |
3 | 2 |
11 | 4 |
12 | 31 |
答案:
select
(case when [FA] > [FB] then [FA] else [FB] end) a_b,
(case when [FB] > [FC] then [FB] else [FC] end) b_c
from t_selmax
三,关于评分
题目:有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来:
语文 | 数学 | 英语 |
及格 | 优秀 | 不及格 |
创建表:
create table t_grade_mark(cn float, math float, en float)
insert into t_grade_mark values(78, 78, 90)
insert into t_grade_mark values(33, 67, 71)
insert into t_grade_mark values(66, 78, 69)
insert into t_grade_mark values(87, 88, 46)
insert into t_grade_mark values(70, 80, 58)
insert into t_grade_mark values(90, 66, 82)
答案:
select (case when [cn]>=80 then '优秀' when [cn] >= 60 then '及格' when [cn] < 60 then '不及格' end) [语文],
(case when [math]>=80 then '优秀' when [math] >= 60 then '及格' when [math] < 60 then '不及格' end) [数学],
(case when [en]>=80 then '优秀' when [en] >= 60 then '及格' when [en] < 60 then '不及格' end) [英语] from t_grade_mark
where [cn]=70 and [math]=80 and [en]=58
(补充),对每个字段都进行同样的case判断,我觉得代码有点冗余度.有谁有好的方法,欢迎提出.
四,group by 和 having(华为面试)
题目:一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。
建表:
create table t_ids(id nvarchar(5), name nvarchar(20) not null, age int)
insert into t_ids values('x001', 'jcson', 20)
insert into t_ids values('x001', 'domy', 21)
insert into t_ids values('x002', 'jim', 22)
insert into t_ids values('x003', 'lucy', 19)
insert into t_ids values('a001', 'hoby', 27)
insert into t_ids values('a001', 'kin', 20)
insert into t_ids values('a001', 'cry', 23)
实现结果:
id | 个数 |
a001 | 3 |
x001 | 2 |
答案:
select id, COUNT(*) [个数] from t_ids group by id having COUNT(*) > 1
sql - 面试的更多相关文章
- 一道SQL面试例题 if...else 与聚集函数
晚上回来,同学说面试遇到了一个SQL面试题目,自己做了一下,总结总结. 题目如下: 下面是产品数据表(产品id,颜色col,数量num),其中每种产品有1~2种颜色. 求每种产品各颜色的数量差值(对于 ...
- Sql面试常考题(持续添加)
最近萌生换工作的念头,于是上网下载了一些公司的面试题,重新看了面试题中的Sql部分,这些查询题有时候只是兜一个弯角来考,对于给EF惯坏的孩子来说还是有点难度的(给面试官鄙视了几下的结果),所以列出最近 ...
- sql面试
1.用一条SQL语句 查询出每门课都大于80分的学生姓名 name kecheng fenshu 张三 语文 81张三 数学 75李四 语文 ...
- SQL面试笔试经典题(Part 2)
本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记. 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.html 01 问题 ...
- SQL面试积累
以下题目都在MySQL上测试可行,有疏漏或有更优化的解决方法的话欢迎大家提出,我会持续更新的:) 有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录,写一段SQL语句,检索出每 ...
- sql面试学到新内容
1.事物的保存点 MYSQL可以让我们对事务进行部分回滚,就是在事务里调用SAVEPOINT语句来设置一些命名标记.如果想要回滚到那个标记点位置,需要使用ROLLBACK语句来指定哪个保存点. mys ...
- SQL面试整理(1)——数据库连接池
在web开发中,如果JSP.Servlet或EJB使用JDBC直接访问数据库,每一次数据访问请求都必须经历建立数据库连接,打开数据库,存取数据库和关闭数据库连接等操作步骤,如果频繁发生这种数据库操作, ...
- sql面试-查询选修课程的学生
首先: 1 . EXISTS 子查询找到的提交 NOT EXISTS 子查询中 找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2 . 建立程序循环的概念,这是一个动态的查询过程.如 F ...
- SQL面试50题
1.查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号(重点) SELECT a.s_id,a.s_score FROM (') as a INNER JOIN (') as b on ...
随机推荐
- hadoop job执行完的统计信息
Total committed heap usage (bytes)= Physical memory (bytes) snapshot= Virtual memory (bytes) snapsho ...
- Computational Methods in Bayesian Analysis
Computational Methods in Bayesian Analysis Computational Methods in Bayesian Analysis [Markov chain ...
- 设置android状态栏颜色和toolbar颜色一致
使用:https://github.com/jgilfelt/SystemBarTint在Activity中:@Overrideprotected void onCreate(Bundle saved ...
- js和jsp
1.js中的字符串赋值可以用' '或者" ". alert('1111'); alert("1111"); document.getElementById('d ...
- 从相对路径说开来(从C++到Qt)
从相对路径说开来(从C++到Qt) 转载自:http://blog.csdn.net/dbzhang800/article/details/6363165 在Qt论坛经常看到网友抱怨: QPixmap ...
- Linux下安装软件心得
1 软件安装方法: 源代码编译安装:tar.gz等压缩格式,需要经过手动编译,./configure,make ,make install ,然后进行配置操作 二进制安装:tar.gz等压缩格式,解压 ...
- <未测>源码升级安装glibc和rpm升级glibc
源码升级安装glibc和rpm升级glibc http://jacklin9.spaces.live.com/blog/cns!A891B52E1182AFB2!346.entry http://bl ...
- Inotify: 高效、实时的Linux文件系统事件监控框架
Inotify: 高效.实时的Linux文件系统事件监控框架 概要 - 为什么需要监控文件系统? 在日常工作中,人们往往需要知道在某些文件(夹)上都有那些变化,比如: 通知配置文件的改变 ...
- 如何解决设置Session保存在StateServer后引起WebService/WebMethod无法异步获取Session
项目中有一个文件上传功能,需要显示文件上传进度.于是使用PageMethods 调用WebService/WebMethod . 在demo中测试一切正常.但是转移到项目中之后无法异步刷新文件上传进度 ...
- 【动态规划】Vijos P1143 三取方格数(NOIP2000提高组)
题目链接: https://vijos.org/p/1143 题目大意: NxN的矩阵,每个值只能取一次,从(1,1)走到(n,n)走三次能取得的最大值. 题目思路: [动态规划] f[x1][y1] ...