搜索类别表[className]中的每个类别下点击率最高的那条记录

转载 2006年05月29日 13:13:00
  今天突然想起来很久以前的一个sql面试题,在同事的帮助下终于实现了.在此对vivianhu(MM)表示感谢.
题目具体数据记不清了,但是大概意思一样,要求在查询分析器中完成,题目如下:

表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


作者Blog:http://blog.csdn.net/kgdiwss/
相关文章
对该文的评论
CSDN 网友 ( 2006-04-20)
确实是不需要这么复杂。

select a.productid, a.productname, a.clicknum 
from asf a, ( select parentid, max(clicknum) clicknum from asf group by parentid) b
where a.parentid = b.parentid and a.clicknum = b.clicknum
order by a.clicknum desc
CSDN 网友 ( 2006-04-20)
vivianhu(MM)是谁,这么简单的问题还用存储过程写循环????????????
CSDN 网友 ( 2006-04-20)
一条语句搞定
SELECT productID, productName, clickNum
FROM productInfo
WHERE (convert(varchar(20),parentID) + '_' + convert(varchar(20),clickNum) in
          (SELECT convert(varchar(20),parentID) + '_' + convert(varchar(20),MAX(clickNum))
         FROM productInfo
         GROUP BY parentID))
hero4u ( 2006-04-19)
貌似可以使用 视图 吧
create view
CSDN 网友 ( 2006-04-19)
需要这么复杂吗? 分组就可以了嘛

如何用分析函数找出EMP表中每个部门工资最高的员工

EMP表是Oracle测试账户SCOTT中的一张雇员表,首先,我们来看看emp表的数据 SQL> select * from emp; EMPNO ENAME JOB ...

实现一个方法,搭出最高的一堆箱子,箱堆的高度为每个箱子高度的总和

public ArrayList createStackR(Box[] boxes,Box bottom) { int max_height=0; ArrayList max_stack=nul...

sql查询每个班上成绩最高的学生信息

sql查询每个班上成绩最高的学生信息 数据库表和数据准备: if exists (select * from sysobjects where id = OBJECT_ID('[classin...

SQL查询一个表中类别字段中Max()最大值对应的记录

问题是: 数据库有一个表 code,里面有个点击量字段click_num和一个类别字段kind以及其它信息字段, 现在要搜出每个类别中点击量最大的那条记录,如果是10个类别,那么结果应该是10条记...

MySQL查询:查询一个表中类别字段中Max()最大值对应的记录

转:https://my.oschina.net/hanzhankang/blog/210623  问题是: 数据库有一个表 code,里面有个点击量字段click...

MySQL查询:查询一个表中类别字段中Max()最大值对应的记录

问题是: 数据库有一个表 code,里面有个点击量字段click_num和一个类别字段kind以及其它信息字段, 现在要搜出每个类别中点击量最大的那条记录,如果是10个类别,那么结...
  • HX_lei
  • HX_lei
  • 2016年03月15日 17:45
  • 18981

SQL查询一个表中类别字段中Max()最大值对应的记录

http://blog.csdn.net/bushizhuanjia/article/details/6854208 问题是: 数据库有一个表 code,里面有个点击量字段clic...
  • lhq186
  • lhq186
  • 2017年07月07日 11:13
  • 639

DIY输出成绩最高的学生记录

  • 2014年12月15日 01:21
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:搜索类别表[className]中的每个类别下点击率最高的那条记录
举报原因:
原因补充:

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