zoukankan      html  css  js  c++  java
  • [转] 很久以前的一个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

  • 相关阅读:
    大魔头视频解析 线路收集(持续更新)
    如何配置双网?
    pom配置资源文件中的二进制文件乱码打不开如excel
    漏洞复现-CVE-2017-7525-Jackson远程代码执行
    漏洞复现-CVE-2018-1000861-jenkins远程命令执行
    漏洞复现-wooyun-2015-110216-Elasticsearch写入webshell
    漏洞复现-CVE-2015-5531-ElasticSearch 目录穿越
    漏洞复现-nginx_parsing_vulnerability-nginx解析漏洞
    漏洞复现-insecure-configuration-nginx不安全的配置
    漏洞复现-CVE-2018-1273-Spring Data Commons 远程命令执行
  • 原文地址:https://www.cnblogs.com/temptation/p/407327.html
Copyright © 2011-2022 走看看