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 ...
随机推荐
- android.support.v7.widget.Toolbar 中menu图标不显示问题
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http:// ...
- TOP命令解析
转自: http://www.cnblogs.com/yjf512/ 你不一定懂的cpu显示信息 2013-10-23 11:48 by 轩脉刃, 1688 阅读, 0 评论, 收藏, 编辑 在使用t ...
- (转载)提高mysql插入数据的速度
(转载)http://blog.csdn.net/bhq2010/article/details/7376352 需要在mysql中插入2000万条记录,用insert语句插入速度很有限,每秒钟几百条 ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
- 【动态规划】【KMP】HDU 5763 Another Meaning
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763 题目大意: T组数据,给两个字符串s1,s2(len<=100000),s2可以被解读成 ...
- 高效算法——E - 贪心-- 区间覆盖
E - 贪心-- 区间覆盖 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E 解题思路: 贪心思想, ...
- <离散数学>学习笔记1--逻辑和证明
今天开始离散数学的自学旅程. 主题:逻辑和证明 逻辑规则给出数学语句的准确含义.逻辑对计算机科学有着重要作用.为了理解数学,我么必须理解正确的数学论证是由什么组成的.只要证明一个数学语句是真的,我们就 ...
- 带你一分钟理解 JavaScript 闭包
什么是闭包? 先看一段代码: function a(){ var n = 0; function inc() { n++; console.log(n); } inc(); inc(); } a(); ...
- vue-cli 中 使用vue-resource 输出后台数据
阅读此文前,请了解vue-cli 组件如何使用 http://www.cnblogs.com/pearl07/p/6252116.html 1,mock(模拟)后台数据(新建data.Json文件) ...
- 使用国人的koala来重新预编译BOOTSTRAP的LESS文件
好玩...