- 浏览: 7349615 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
个SQL 面试题
去年应聘一个职位未果,其间被考了一个看似简单的题,但我没有找到好的大案.
不知各位大虾有无好的解法?
题为:
有两个表, t1, t2,
Table t1:
SELLER | NON_SELLER
----- -----
A B
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C
Table t2:
SELLER | COUPON | BAL
----- --------- ---------
A 9 100
B 9 200
C 9 300
D 9 400
A 9.5 100
B 9.5 20
A 10 80
要求用SELECT 语句列出如下结果:------如A的SUM(BAL)为B,C,D的和,B的SUM(BAL)为A,C,D的和.......
且用的方法不要增加数据库负担,如用临时表等.
NON-SELLER| COUPON | SUM(BAL) ------- --------
A 9 900
B 9 800
C 9 700
D 9 600
A 9.5 20
B 9.5 100
C 9.5 120
D 9.5 120
A 10 0
B 10 80
C 10 80
D 10 80
关于论坛上那个SQL微软面试题
问题:
一百个账户各有100$,某个账户某天如有支出则添加一条新记录,记录其余额。一百天后,请输出每天所有账户的余额信息
这个问题的难点在于每个用户在某天可能有多条纪录,也可能一条纪录也没有(不包括第一天)
返回的记录集是一个100天*100个用户的纪录集
下面是我的思路:
1.创建表并插入测试数据:我们要求username从1-100
CREATE TABLE [dbo].[TABLE2] (
[username] [varchar] (50) NOT NULL , --用户名
[outdate] [datetime] NOT NULL , --日期
[cash] [float] NOT NULL --余额
) ON [PRIMARY
declare @i int
set @i=1
while @i<=100
begin
insert table2 values(convert(varchar(50),@i),'2001-10-1',100)
insert table2 values(convert(varchar(50),@i),'2001-11-1',50)
set @i=@i+1
end
insert table2 values(convert(varchar(50),@i),'2001-10-1',90)
select * from table2 order by outdate,convert(int,username)
2.组合查询语句:
a.我们必须返回一个从第一天开始到100天的纪录集:
如:2001-10-1(这个日期是任意的)到 2002-1-8
由于第一天是任意一天,所以我们需要下面的SQL语句:
select top 100 dateadd(d,convert(int,username)-1,min(outdate)) as outdate
from table2
group by username
order by convert(int,username)
这里的奥妙在于:
convert(int,username)-1(记得我们指定用户名从1-100 :-))
group by username,min(outdate):第一天就可能每个用户有多个纪录。
返回的结果:
outdate
------------------------------------------------------
2001-10-01 00:00:00.000
.........
2002-01-08 00:00:00.000
b.返回一个所有用户名的纪录集:
select distinct username from table2
返回结果:
username
--------------------------------------------------
1
10
100
......
99
c.返回一个100天记录集和100个用户记录集的笛卡尔集合:
select * from
(
select top 100 dateadd(d,convert(int,username)-1,min(outdate)) as outdate
from table2
group by username
order by convert(int,username)
) as A
CROSS join
(
select distinct username from table2
) as B
order by outdate,convert(int,username)
返回结果100*100条纪录:
outdate username
2001-10-01 00:00:00.000 1
......
2002-01-08 00:00:00.000 100
d.返回当前所有用户在数据库的有的纪录:
select outdate,username,min(cash) as cash from table2
group by outdate,username
order by outdate,convert(int,username)
返回纪录:
outdate username cash
2001-10-01 00:00:00.000 1 90
......
2002-01-08 00:00:00.000 100 50
e.将c中返回的笛卡尔集和d中返回的纪录做left join:
select C.outdate,C.username,
D.cash
from
(
select * from
(
select top 100 dateadd(d,convert(int,username)-1,min(outdate)) as outdate
from table2
group by username
order by convert(int,username)
) as A
CROSS join
(
select distinct username from table2
) as B
) as C
left join
(
select outdate,username,min(cash) as cash from table2
group by outdate,username
) as D
on(C.username=D.username and datediff(d,C.outdate,D.outdate)=0)
order by C.outdate,convert(int,C.username)
注意:用户在当天如果没有纪录,cash字段返回NULL,否则cash返回每个用户当天的余额
outdate username cash
2001-10-01 00:00:00.000 1 90
2001-10-01 00:00:00.000 2 100
......
2001-10-02 00:00:00.000 1 90
2001-10-02 00:00:00.000 2 NULL <--注意这里
......
2002-01-08 00:00:00.000 100 50
f.好了,现在我们最后要做的就是,如果cash为NULL,我们要返回小于当前纪录日期的第一个用户余额(由于我们使用order by cash,所以返回top 1纪录即可,使用min应该也可以),这个余额即为当前的余额:
case isnull(D.cash,0)
when 0 then
(
select top 1 cash from table2 where table2.username=C.username
and datediff(d,C.outdate,table2.outdate)<0
order by table2.cash
)
else D.cash
end as cash
g.最后组合的完整语句就是
select C.outdate,C.username,
case isnull(D.cash,0)
when 0 then
(
select top 1 cash from table2 where table2.username=C.username
and datediff(d,C.outdate,table2.outdate)<0
order by table2.cash
)
else D.cash
end as cash
from
(
select * from
(
select top 100 dateadd(d,convert(int,username)-1,min(outdate)) as outdate
from table2
group by username
order by convert(int,username)
) as A
CROSS join
(
select distinct username from table2
) as B
) as C
left join
(
select outdate,username,min(cash) as cash from table2
group by outdate,username
) as D
on(C.username=D.username and datediff(d,C.outdate,D.outdate)=0)
order by C.outdate,convert(int,C.username)
返回结果:
outdate username cash
2001-10-01 00:00:00.000 1 90
2001-10-01 00:00:00.000 2 100
......
2002-01-08 00:00:00.000 100 50
***********************************************************************************
取出sql表中第31到40的记录(以自动增长ID为主键)
*从数据表中取出第n条到第m条的记录*/
declare @m int
declare @n int
declare @sql varchar(800)
set @m=40
set @n=31
set @sql='select top '+str(@m-@n+1) + '* from idetail where autoid not in(
select top '+ str(@n-1) + 'autoid from idetail)'
exec(@sql)
select top 10 * from t where id not in (select top 30 id from t order by id ) orde by id
--------------------------------------------------------------------------------
select top 10 * from t where id in (select top 40 id from t order by id) order by id desc
*******************************************************************************
一道面试题,写sql语句
有表a存储二叉树的节点,要用一条sql语句查出所有节点及节点所在的层.
表a
c1 c2 A ----------1
---- ---- / \
A B B C --------2
A C / / \
B D D N E ------3
C E / \ \
D F F K I ---4
E I
D K
C N
所要得到的结果如下
jd cs
----- ----
A 1
B 2
C 2
D 3
N 3
E 3
F 4
K 4
I 4
有高手指导一下,我只能用pl/sql写出来,请教用一条sql语句的写法
SQL> select c2, level + 1 lv
2 from test start
3 with c1 = 'A'
4 connect by c1 = prior c2
5 union
6 select 'A', 1 from dual
7 order by lv;
C2 LV
-- ----------
A 1
B 2
C 2
D 3
E 3
N 3
F 4
I 4
K 4
已选择9行。
请教一道SQL面试题!!!
id name val
1 aaa 30
2 aaa 40
3 aaa 50
1 bbb 35
2 bbb 45
3 bbb 55
table_b:
name val1 val2 val3
aaa 30 40 50
bbb 35 45 55
请用一个SQL语句实现table_a到table_b的转化。
from (
select lag(val, 1) over (
partition by name
order by id
) pre,
val,
lead(val, 1) over(
partition by name
order by id
) post
from table_a
) ir
where pre is not null and post is not null;
刚刚查了一下lead和lag的用法,发现即使有4个及以上值亦可采用改变offset参数来实现,如四个值的时候可以:
select * from (
select name,
lag(val, 3) over(partition by name order by id) val1,
lag(val, 2) over(partition by name order by id) val2,
lag(val, 1) over(partition by name order by id) val3,
val val4
from table_a
) where val1 is not null and val2 is not null and val4 is not null;
但子查询的产生的垃圾数据会是最终结果的n-1倍,有没有不用子查询能得到结果的方法呢?求教!
发表评论
-
【转】华为的JAVA面试题
2011-10-28 09:20 2371对我个人来说,看看 ... -
sql 笔试题(四)
2009-04-12 11:32 8021sql 相关的查询面试题收集及答案一 //查询某表中的第3 ... -
sql笔试题(五)
2009-04-12 10:02 45461.磁盘柜上有14块73G的磁 ... -
sql 笔试题(四)
2009-04-12 10:01 4033一道经典SQL面试题及答案 现在我们假设只有一个table, ... -
简单SQL 使用
2009-04-12 09:57 2496问题描述: 本题用到下面三个关系表: CARD 借书卡。 CN ... -
经典面试题
2009-04-12 09:51 3281金蝶面试,出了这样一道SQL题,共享之给下面这样的一个表记录: ... -
SQL笔试题
2009-04-12 09:43 2762一 单词解释(2分/个) 34 Data ... -
sql 笔试题(五)
2009-04-09 19:16 2457学号 性别 分数 1 男 80 2 ... -
sql 笔试题(四)
2009-04-09 19:13 4129SQL Server笔试题解答 作 ... -
sql 笔试题(三)
2009-04-09 19:04 4365题目一、 有两个表: TableX有三个字段Code、 Nam ... -
求职面试必备的15个问题
2009-04-09 18:58 3155在应聘的过程中,总会遇到一些难缠的问题 ... -
sql 笔试题(二)
2009-04-09 18:56 2519有三个表: 学生表:student 字段:stuID,chi ... -
sql笔试题
2009-04-09 18:47 4317create table dept(deptno varcha ...
相关推荐
这篇文档《2011 SQL笔试题》及其压缩包资源,显然是为了帮助学习者或者应聘者准备SQL相关的面试或笔试而准备的。 SQL的基础知识点包括: 1. **数据类型**:SQL支持多种数据类型,如整数(INT)、浮点数(FLOAT)、...
经典sql练习,几道经典的SQL笔试题题目。sql就在于多多练习
在SQL笔试题中,常见的知识点包括但不限于以下几类: 1. **基本查询**:掌握SELECT语句,包括选择列、表连接(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)、WHERE子句用于筛选数据,GROUP BY进行数据分组,...
SQL笔试题库。
1到3年工作经验的 sql面试笔试题(通过面试360,华为,阿里收集)
SQL笔试题知识点总结 以下是根据给定的文件信息,生成的相关知识点总结: 一、基本概念 1. 数据库管理系统(DBMS):数据库管理系统是一个软件系统,用于创建、设计、管理和维护数据库。 2. RDBMS(Relational ...
SQL 笔试题是数据库领域中的一个重要组成部分,涉及到数据库的各个方面,包括触发器、存储过程、索引、内存泄漏、事务、锁、视图、游标等知识点。 1. 触发器的作用:触发器是一种特殊的存储过程,通过事件来触发...
SQL笔试题通常考察应聘者对于SQL语言的理解和实际应用能力,尤其是查询语句的编写、SQL函数的使用,以及多表连接操作等。本次整理的SQL题目覆盖了这些基础而又核心的知识点。 首先,基础查询语句的编写是考察的重点...
### SQL笔试题概述 该文件提供了一系列SQL基础知识的笔试题目,并附带了多种题型及其答案。这些题目旨在帮助读者复习和巩固SQL基础知识。 ### SQL基础知识详解 #### 1. SQL基础操作 - **SQL文件管理**:SQL文件...
"SQL笔试题答案" 在本资源中,我们将逐步解释SQL笔试题的答案。这些问题涵盖了SQL基础知识、数据类型、数据操作语言(DML)、数据定义语言(DDL)、事务控制、索引、触发器、视图等方面。 单词解释 在SQL中,了解...
十家互联网大厂SQL笔试题 本资源为十家互联网大厂的SQL笔试题,涵盖了多个方面的SQL知识点,如用户活跃、留存和粘性分析、红包流向探索分析等。以下是对应的知识点: 一、用户活跃、留存和粘性分析 1. 活跃用户数...
根据给定的文件信息,以下是对SQL笔试题的详细知识点解析: ### 1. 查询第30部门的所有员工 题目要求查询所有属于部门编号为30的员工信息。 ```sql SELECT * FROM iv_emp WHERE deptno = 30; ``` ### 2. 查询所有...
SQL笔试题解析 本文将对常见SQL笔试题进行解析,涵盖了多个知识点,包括统计查询、条件判断、日期统计等。下面是对每个题目的详细解析。 1. 统计查询SQL练习 问题:统计查询SQL练习,数据库中表结构如下,字段...
SQL是Structured Query Language的缩写,是用于管理和...以上就是SQL笔试题涉及的关键知识点,涵盖了数据库基础概念、SQL语句的使用以及事务和索引的理解。理解并熟练掌握这些概念对于数据库管理和开发工作至关重要。
SQL笔试题知识点总结 本资源摘要信息涵盖了SQL笔试题的知识点,包括SQL命令、查询语句、数据类型、数据库设计等方面的知识。 一、SQL基本命令 * 使用UPDATE命令将学生表STUDENT中的学生年龄AGE字段的值增加1岁,...
根据给定的文件信息,以下是对“SQL 笔试题”中的关键知识点的详细解析: ### 1....以上知识点覆盖了SQL笔试题中提及的关键概念和技术细节,深入理解这些内容将有助于提升个人的SQL技能和面试表现。
标题中的“sql笔试题(不断更新中)”表明这是一个关于SQL考试或面试题目的集合,可能涵盖了多种SQL语言的概念、语法和应用。SQL,全称Structured Query Language,是用于管理关系数据库的标准语言,包括查询数据、...
在SQL笔试题中,通常会考察以下几个核心知识点: 1. **查询语句**:这是SQL的基础,用于从数据库中选择信息。例如,题目要求从"Customers"表中选取所有姓为"Smith"的顾客记录,可以使用如下的SQL语句: ```sql ...
以下是一些关于SQL笔试选择题中的关键知识点: 1. **关系型数据库**:关系型数据库是一种以表格形式存储数据的数据库,其中数据之间的关系可以通过外键进行关联。题目中提到的Oracle和MySql都是典型的关系型数据库...
在SQL笔试题中,常见的题目类型包括单词解释、编写SQL语句、填空题以及问答题。以下是根据提供的部分试题内容详解的一些关键知识点: 1. **单词解释**: - **Data**:数据,是数据库中的基本元素,可以是数字、...