SQL面试题

SQL数据库 面试题
很久以前的一个sql面试题及答案.
一个sql面试题 题目具体数据记不清了,但是大概意思一样,要求在查询分析器中完成,题目如下:
表className中有如下分类:

classID   className
1               衣服
2               裤子
5               帽子
10             鞋子

表productInfo有如下记录:

productID             productName            parentID            clickNum

1                             男士衣服                       1                           90              -- 衣服类别中这条记录的点击率最高
2                             女士衣服                       1                           80
3                             男士裤子                       2                           70
4                             女士裤子                       2                           90              -- 裤子类别中这条记录点击率最高
5                             男士帽子                       5                           15
6                             女士帽子                       5                           30              -- 帽子类别中这条点击率最高
7                             男士鞋子                       10                         65              -- 鞋子类别中这条点击率最高
8                             女士鞋子                       10                         52
9                             女士鞋子1                     10                         54

现在要求分别把衣服,裤子,帽子,鞋子这些类别中点击率最高的一条记录找出来,然后再降序排列,结果应如下:

productID             productName            clickNum
1                             男士衣服                       90
4                             女士裤子                       90
7                             男士鞋子                       65
6                             女士帽子                       30


以下为实现过程:

/* 
功能: 搜索类别表[className]中的每个类别下点击率最高的那条记录,然后将这些记录降序排列
作者: vivianhu
整理: kgdiwss(我只是添加了注释以及重命名了一些变量)
日期: 2006-4-17
*/


/* 如果存在临时表tTable,则先将它删除 */
if   exists  (
select   *   from  dbo.sysobjects 
where  id  =   object_id (N ' [dbo].[tTable] ' and   OBJECTPROPERTY (id, N ' IsUserTable ' =   1
)
drop   table   [ dbo ] . [ tTable ]

GO

/* 创建临时表 */
create   table  tTable
(
productid 
int ,
productname 
varchar ( 10 ),
clicknum 
int
)

/*  变量申明 */
declare   @classID   int  

/*  定义游标 */
declare  cursor_classID   
CURSOR   FOR  
Select  classID  FROM  className

/*
打开游标
@@FETCH_STATUS
返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
0 表示 FETCH 语句成功。 
*/

OPEN  cursor_classID
FETCH   NEXT   FROM  cursor_classID  INTO   @classID  
WHILE   @@FETCH_STATUS   =   0

/* 搜索某一类别中点击率最高的一条记录 */
BEGIN

insert   into  tTable
select    top   1  productID,productName,clickNum  from  productInfo 
  
where  parentID  =   @classID  
   
order   by  clickNum  desc

   
FETCH   NEXT   FROM  cursor_classID 
   
INTO   @classID

END

/* 关闭游标 */
CLOSE  cursor_classID

/* 删除游标引用 */
DEALLOCATE  cursor_classID

/* 对临时表中的记录根据点击率进行降序排列 */
select   *   from  tTable  order   by  clickNum  desc  

/* 删除临时表 */
drop   table  tTable
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值