Sql面试常考题(持续添加)

  最近萌生换工作的念头,于是上网下载了一些公司的面试题,重新看了面试题中的Sql部分,这些查询题有时候只是兜一个弯角来考,对于给EF惯坏的孩子来说还是有点难度的(给面试官鄙视了几下的结果),所以列出最近感觉比较有意思的Sql查询题。

1.查询出子节点最多的NodeName,如下图的table,

NodeName 子节点
节点1 1
节点2 2
节点3 1
节点3 1
节点3 1
节点4 2
节点4 3

 1 declare @t table( id int ,NodeName varchar(50 ),parentId int)
 2
 3 insert into @t
 4 select 4, ‘节点1‘ ,1
 5 union all
 6 select 5, ‘节点2‘ ,2
 7 union all
 8 select 6, ‘节点3‘ ,1
 9 union all
10 select 7, ‘节点3‘ ,1
11 union all
12 select 1, ‘节点3‘ ,1
13 union all
14 select 2, ‘节点4‘ ,2
15 union all
16 select 3, ‘节点4‘ ,3
17
18 select * from @t
19
20 select top 1  nodename, COUNT(*) from @t group by NodeName order by COUNT(*) desc

2.有表A如下图,需要转换成表B格式

单号   金额

Rk1     10

Rk2     20

Rk3     -30

Rk4     -10

  表A

单号   收入   支出

Rk1     10       0

Rk2     20       0

Rk3      0        30

Rk4      0        10

  表B

 1 declare @t table(danhao nvarchar(20),amount int)
 2 insert into @t
 3 select ‘PK1‘,10 UNION
 4 select ‘PK2‘,20 UNION
 5 select ‘PK3‘,-10 UNION
 6 select ‘PK4‘,-30
 7 select * from @t
 8 select danhao,
 9 (case when amount>0 then amount else 0 end) as N‘收入‘,
10 (case when amount>0 then 0 else amount end) as N‘支出‘
11 from @t

3.有一张表T_Scores,记录比赛成绩

Date                 Name   Score

2008-8-8          拜仁       胜

2008-8-9          奇才       胜

2008-8-9          湖人       胜

2008-8-10        拜仁       负

2008-8-8          拜仁       负

2008-8-12        奇才       胜

要求输出下面的格式:

Name   胜     负

拜仁     1       2

湖人     1       0

奇才     2       0

 1 declare @t table(DateT datetime,name nvarchar(20),Score nvarchar(20))
 2 insert into @t
 3 select ‘2008-8-8‘,N‘拜仁‘,N‘胜‘ union all
 4 select ‘2008-8-8‘,N‘奇才‘,N‘胜‘ union all
 5 select ‘2008-8-8‘,N‘湖人‘,N‘胜‘ union all
 6 select ‘2008-8-8‘,N‘拜仁‘,N‘负‘ union all
 7 select ‘2008-8-8‘,N‘拜仁‘,N‘胜‘ union all
 8 select ‘2008-8-8‘,N‘拜仁‘,N‘胜‘ union all
 9 select ‘2008-8-8‘,N‘奇才‘,N‘胜‘ union all
10 select ‘2008-8-8‘,N‘湖人‘,N‘负‘
11 select name,
12 SUM(case Score when N‘胜‘ then 1 else 0 end)as N‘胜‘,
13 SUM(case Score when N‘负‘ then 1 else 0 end)as N‘负‘
14 from @t
15 group by name

4.根据下图列表求和

id value
1 1
2 2
5 2
6 2
8 3
9 4

 1 declare @t table( id int ,value int )
 2 insert into @t
 3 select 1, 1
 4 union all
 5 select 2, 2
 6 union all
 7 select 5, 2
 8 union all
 9 select 6, 2
10 union all
11 select 8, 3
12 union all
13 select 9, 4
14
15 select * from @t
16 --1.按id 排序,取得所有的奇数 (单数) 行value之和
17
18 select SUM (m. value) from(
19 select ROW_NUMBER () over (order by id )row, id,value from @t)m
20 WHERE m .row% 2=1
21
22 --2.取得所有id 为奇数的行 value之和
23 select SUM (value) from @t where id% 2=1

5.行转列5.1与列转行5.2

5.1如下图所示

name class score
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94

转换成

name 语文 数学 物理
张三 74 83 93
李四 74 84 94

 1 declare @t table ( name varchar (10), 课程 varchar (10), score int )
 2
 3 insert into @t
 4 select ‘ 张三‘, ‘语文‘ ,74
 5 union all
 6 select ‘ 张三‘, ‘数学‘ ,83
 7 union all
 8 select ‘ 张三‘, ‘物理‘ ,93
 9 union all
10 select ‘ 李四‘, ‘语文‘ ,74
11 union all
12 select ‘ 李四‘, ‘数学‘ ,84
13 union all
14 select ‘ 李四‘, ‘物理‘ ,94
15
16 select * from @t
17
18 select name,
19 max(case 课程 when ‘语文‘ then score else 0 end) 语文 ,
20 max(case 课程 when ‘数学‘ then score else 0 end) 数学 ,
21 max(case 课程 when ‘物理‘ then score else 0 end) 物理
22 from @t
23 group by name

5.2列转行

 1 declare @t table ( 姓名 varchar (10), 语文 int ,数学 int,物理 int)
 2
 3 insert into @t
 4 select ‘ 张三‘, 74,83 ,93
 5 union all
 6 select ‘ 李四‘, 74,84 ,94
 7
 8 select * from
 9 (
10  select 姓名,课程 =‘语文 ‘,分数 =语文 from @t
11  union all
12  select 姓名,课程 =‘数学 ‘,分数 =数学 from @t
13  union all
14  select 姓名,课程 =‘物理 ‘,分数 =物理 from @t
15 )m

  后期等待多了之后再用心整理成一份Sql文档,现在题目还少,努力去涵盖面试中遇到的,谢谢观看。

时间: 2024-12-16 04:26:48

Sql面试常考题(持续添加)的相关文章

Python知识点——面试常考题

1.python中在使用while时,可以与else一起使用.即当条件不满足时不是跳出循环,而是执行else后面的语句后再跳出循环 2.python中不用声名变量,可以直接使用 3.python中的数据类型有1)数字:int double 等2)字符串:用"" '' 表示.单个字符也默认为字符串.字符串可索引和单个提取.3)元组:特殊的字符串,用()4)列表:用[]5)集合:用{}或set()6)字典:字典和以上差别较大,多了一个关键字的定义:用d = {key1 : value1,

【C++面试】常考题复习:排序算法

// Sort.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> /************************************************************************/ /* copyright (c) 2014 kernel_main /* c++面试常考点 /* 转载请注明出处:http://www.cnblogs.com/kernel0815/

python面试总结2(函数常考题和异常处理)

python函数常考题 可变类型为参数 不能类型为参数 python如何传递参数 传递值还是引用呢?都不是.唯一支持的参数传递是共享穿参 Call by Object(Call by Object Reference or Call by Sharing) Call by sharing(共享传参).函数形参获得实参中各个引用的副本 def flist(l): l.append(0) print(l) l = [] #指向同一个内存地址 flist(l) # [0] flist(l) # [0,

PHP面试常考内容之Memcache和Redis(1)

你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点为以下几点,更新时间为每周一三五,可以关注本栏持续关注,感谢你的支持. 一.什么是Memcache?二.Memcache有什么特征?三.Memcache的内存管理机制是什么样的?四.Memcache和Memcached有什么区别?五.如何操作Memcache?六.如何使用Memcache做Session共享?

安卓面试易考题(二)

这是延续上一部分的知识,依然是面试题,进入正题: 面试题一:谈谈你对Activity的理解: 这是考官希望你把自己的心得,做项目的时候的体会写出来:我们可以答Activity异常被系统回收的时候怎么处理的,然后可以讲讲Activity的生命周期. 面试题二:Service是否运行在主线程?能否在Service里面执行耗时的操作? 答:service是默认运行在主线程的,很多人觉得是后台服务就觉得应该是在子线程,其实不是,所以我们不能在里面执行耗时的操作,因为会产生ANR异常.我们要做耗时的操作要

计算机考研复试面试常问问题 计算机网络篇(下)

计算机考研复试面试常问问题 计算机网络篇(下) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高!绝对良心之作! 此系列一共有8篇:编程语言篇|数据结构篇|操作系统篇|组成原理篇|计算机网络篇|数据库篇|软件工程篇|计算机专业英语篇(还未全部完成,敬请期待,你们的支持和关注是我最大的动力!) 个人整理,不可用于商业用途,转载请注明出处. 作者各个平台请搜索:程序员宝藏.快来探索属于你的宝藏吧

计算机考研复试面试常问问题 操作系统篇

计算机考研复试面试常问问题 操作系统篇 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高! 此系列一共有8篇:编程语言篇|数据结构篇|操作系统篇|组成原理篇|计算机网络篇|数据库篇|软件工程篇|计算机专业英语篇(还未全部完成,敬请期待,你们的支持和关注是我最大的动力!) 个人整理,不可用于商业用途,转载请注明出处. 作者各个平台请搜索:程序员宝藏.快来探索属于你的宝藏吧! 需要pdf直接打印

计算机考研复试面试常问问题 组成原理篇(下)

计算机考研复试面试常问问题 组成原理篇(下) 使用前需知(拒绝白嫖,从你我做起,你只需点个赞就行): 需要pdf直接打印版,可在公众号"程序员宝藏"回复复试上岸获取(会持续更新) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高! 声明:一些边边角角的没有收集,毕竟是考研面试,不是笔试,这样也能减轻大家的负担! 有些点在(快速唤起记忆知识框架)里就有,所以没有加上! 此系列一共有8

一道SQL面试例题 if...else 与聚集函数

晚上回来,同学说面试遇到了一个SQL面试题目,自己做了一下,总结总结. 题目如下: 下面是产品数据表(产品id,颜色col,数量num),其中每种产品有1~2种颜色. 求每种产品各颜色的数量差值(对于只有一种颜色的保留产品总数) 解法如下: 1.先求出每种产品各颜色的数量 这个不难,直接使用group by 就可以啦.SQL语句如下: 1 select id,col,sum(num) total from chanpin group by id,col 结果: 2.求每种产品各颜色的数量差值(对