SQL面试题

原创 2007年09月24日 11:31:00
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
 

sql面试题java

  • 2017年11月06日 20:53
  • 58KB
  • 下载

SQL面试题解析

  • 2014年03月11日 13:18
  • 20KB
  • 下载

Database之六 sql面试题整理

SQL经典面试题及答案 2007年07月27日 星期五 上午 08:42 1.一道SQL语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2...

sql面试题.。

  • 2013年08月23日 17:31
  • 3KB
  • 下载

SQL经典面试题及答案

  • 2016年11月28日 11:47
  • 135KB
  • 下载

数据库面试题 Java 程序员 SQL 深入解析(一)

存储过程和函数的区别(stored procedure vs function) You can’t mix in stored procedures with ordinary SQL, whils...

极详细数据库面试题(SQL+ORACLE)

  • 2012年11月23日 17:43
  • 9.28MB
  • 下载

数据库面试题(SQL+ORACLE)

  • 2011年12月15日 15:21
  • 312KB
  • 下载

一道面试题:请写sql查询出,成绩小于60的同学的姓名和平均分,并按平均分排序

给出如下3张表,stu表、sc表和course表: /* Navicat MySQL Data Transfer Source Server         : db_fight...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL面试题
举报原因:
原因补充:

(最多只允许输入30个字)