zoukankan      html  css  js  c++  java
  • 查询每个歌手下载量最大的三条数据

    假设有一个表叫SongsTop,是歌曲下载情况的记录。

     

    Star,SongName,Hot

    周杰伦,乔克叔叔,2861

    周杰伦,稻香,4842

    周杰伦,兰亭序,2656

    周杰伦,流浪诗人,1568

    S.H.E,酸甜,1479

    S.H.E,月光手札,1138

    S.H.E,店小二,715

    S.H.E,熬夜DJ,538

    S.H.E,天亮了,931

    张信哲,天使的眼泪,3189

    张信哲,长途旅行,7075

    张信哲,牧羊人,1235

    张信哲,最好的时光,1618

    弦子,醉清风,1848

    弦子,不爱最大,439

    弦子,蒙娜丽莎,688

    王若琳,因为你爱我,734

    王若琳,For No Reason(国语),623

    王若琳,迷宫,599

    王若琳,We've Only Just Begun,659

     

    现在要求,列出每位歌手的下载量最大的三条记录。禁止用游标。

     

    我的方案,不知道有没有更简单的方法:

     

    1 建立一个表值函数:

    CREATE FUNCTION [dbo].[GetTop]
    
    (  
    
        @Star varchar(50)
    
    )
    
    RETURNSTABLE
    
    AS
    
    RETURN
    
    (
    
        selecttop 3 Star,SongName,Hot from songstop where star = @Star orderby hot desc
    
    )

    2 SQL查询:

    SELECT DISTINCT b.star,b.songname,b.hot FROM songstop s
    
    CROSS APPLY dbo.GetTop(s.star) b
    
    ORDERBY star asc,hot DESC

    第二种方案

    不建立函数,直接使用内置的PARTITIONROW_NUMBER函数

    SELECT * FROM
    (SELECT Star,SongName,Hot,ROW_NUMBER() OVER (PARTITION BY Star ORDER BY Hot DESC) AS ROWNO FROM songstop ) a WHERE ROWNO <= 3
  • 相关阅读:
    paramiko 简单的使用
    python+appium 实现qq聊天的消息,滑动删除聊天消息
    selenium select 选择下拉框
    从FTP获取文件并恢复网络设备
    weblogic监控
    打包压缩maven库
    解决vsftp无法上传文件及文件夹的问题
    Ansible之Playbook详解、案例
    python解压分析jar包
    owasp对项目依赖的jar包安全扫描
  • 原文地址:https://www.cnblogs.com/darkiller/p/2716528.html
Copyright © 2011-2022 走看看