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 ...
随机推荐
- github+Hexo快速搭建个人博客
注意 本文主要针对Windows平台和Hexo 3.x 准备工作 下载Git [下载地址] [Git官网](https://git-scm.com/download/) 下载Node.js [下载地址 ...
- android小文章——手机照片上传服务器方法
手机上传:http://blog.csdn.net/bitter_2014/article/details/40618587
- 用 SQL 脚本读取Excel 中的sheet数量及名称
-- Get table (worksheet) or column (field) listings from an excel spreadsheet -- 设置变量 declare @linke ...
- Strange Way to Express Integers (一般模线性方程组)
Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 8476 Accepted: 2554 Description Elin ...
- Shredding Company(dfs)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3519 Accepted: 2009 Description You h ...
- SQL Server判断对象是否存在 (if exists (select * from sysobjects )(转)
1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name = ’数据库名’) drop database [数据库名] ...
- (转载)用PHP正则表达式清除字符串的空白
(转载)http://www.chinaz.com/program/2009/0220/67569.shtml 我们经常会处理来自用户输入或从数据库中读取的数据,可能在你的字符串中有多余的空白或制表符 ...
- 数据结构(set):COGS 62. [HNOI2004] 宠物收养所
62. [HNOI2004] 宠物收养所 ★★★ 输入文件:pet.in 输出文件:pet.out 简单对比时间限制:1 s 内存限制:128 MB 最近,阿Q开了一间宠物收养所.收养 ...
- 【模拟】Vijos P1005 超长数字串
题目链接: https://vijos.org/p/1005 题目大意: 无限的正整数按顺序拼接成字符串S(S=12345678910111213...),给你一个字符串A(len<=200)求 ...
- 连接Oracle的几种方式
如何引用Data.OracleClient.dll 由于从.net 4.0之后,微软将OracleClient.dll从框架里去除了,所以要使用,需要在VS2010里面去把项目的.net框架从.net ...