`

用CROSS APPLY解开了困扰我一年多的一个问题

SQL 
阅读更多

假设有一个表叫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)

)

RETURNS TABLE

AS

RETURN

(

    select top 3 Star,SongName,Hot from songstop where star = @Star order by hot desc

)

 

2 SQL查询:

select distinct b.star,b.songname,b.hot from songstop s

cross apply dbo.GetTop(s.star) b

order by star asc,hot desc

分享到:
评论

相关推荐

    SQL Server CROSS APPLY和OUTER APPLY的应用详解

    在这个例子中,`LargeTable`的`Name`列包含用冒号分隔的值,`Split`是一个自定义的表值函数,它将字符串分割成多个行。CROSS APPLY将`Split`函数应用到`LargeTable`的每一行,并只保留那些在分割后`a`字段非空的行。...

    SQLServer 2008 R2中使用Cross apply统计最新数据和最近数据

    在SQL Server 2008 R2中,`APPLY`运算符是一个强大的工具,用于在查询中结合表值函数。此运算符分为两种类型:`CROSS APPLY`和`OUTER APPLY`,它们在处理数据时具有不同的行为。 首先,`APPLY`运算符的基本原理是将...

    SQLServer APPLY表运算符使用介绍

    SQL Server的APPLY表运算符是在SQL Server 2005及更高版本中引入的一个强大工具,它为复杂的查询提供了更多的灵活性。APPLY运算符分为两种类型:CROSS APPLY和OUTER APPLY,它们在处理数据时有显著的区别。 CROSS ...

    cross-env-6.0.2.zip

    2. **简单易用**:使用cross-env设置环境变量就像运行一个简单的命令一样,例如`npx cross-env NODE_ENV=production`,这样就无需关心当前操作系统对环境变量的处理方式。 3. **命令行接口**:cross-env可以与其他...

    cross-env-7.0.3.zip

    `cross-env`是一个非常实用的npm模块,它允许你在命令行中设置环境变量,无论你是在Windows、Linux还是macOS上工作,都能确保环境变量的设定保持一致。现在让我们深入了解一下`cross-env`的7.0.3版本及其核心功能。 ...

    最新的yapi 的cross-request 的离线插件

    使用离线插件带来的好处显而易见:一方面,减少了因网络问题导致的不便,特别是在网络环境较差或严格限制网络访问的场合;另一方面,离线安装和更新插件也提高了安全性,避免了因网络下载可能引入的潜在风险。 总之...

    SQLServer中如何将一个字段的多个记录值合在一行显示

    在上面的代码中,我们使用 CROSS APPLY 来将表与一个表值函数结合起来。在表值函数中,我们使用了 STUFF 函数来删除最后一个逗号,并返回合并后的结果。 知识点 3:使用 STRING_AGG 函数实现字段值合并 在 SQL ...

    sql server关键字详解大全(图文)

    使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为左输入。 通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。 ...

    cross-env-7.0.2.zip

    总的来说,cross-env是一个强大的工具,它简化了在多平台环境中管理和使用环境变量的过程,提高了开发效率和代码的可移植性。了解和掌握如何有效地使用它,对于Node.js开发者来说是非常重要的。

    cross-request-3.3.0.zip

    标题 "cross-request-3.3.0.zip" 暗示了这是一个关于 "cross-request" 库的软件包,版本为3.3.0。在IT领域,"cross-request"通常指的是一个允许开发者进行跨域HTTP请求的工具,这对于前端开发、API测试以及集成测试...

    cross-request3.0谷歌插件.zip

    【标题】"cross-request3.0谷歌插件.zip"是一个包含最新版本的cross-request3.0插件的压缩包,该插件专为谷歌浏览器(Chrome)设计。它旨在提升开发人员在API测试和调试过程中的效率,尤其与YApi接口管理工具配合...

    crosstalk_crosstalk_comsol_源码

    在电子设计领域,沟槽串扰(Crosstalk)是一个不可忽视的关键问题,尤其是在高速数字电路和集成电路设计中。它指的是信号线之间由于电磁耦合导致的干扰现象,可能引起信号质量下降,甚至系统功能失效。为了解决这一...

    @CrossOrigin解决跨域问题

    使用@CrossOrigin注解解决前后台分离中的跨域问题

    cross-request 3.0 Chrome 插件

    最新cross-request3.0插件下载,下载完成后解压,在Chrome中选择加载已解压的插件进行安装。

    crossdomain.xml

    crossdomain.xml用于unity3d生成的webplayer不能读取数据库的问题,用于unity3d生成的webplayer不能读取数据库的问题

    perl-cross.tar.gz

    Perl-Cross 是一个用于在不同平台上交叉编译 Perl 解释器的工具集。这个压缩包“perl-cross.tar.gz”包含了所有必要的源代码和脚本,使得开发者能够在一台系统上构建适用于其他操作系统或架构的 Perl 版本。这个过程...

    cross-tool 的官方文档

    - **可移植性**:cross-tool 是一个可移植的 shell 脚本,可以在 Linux、MacOSX、Solaris 和 Cygwin 上使用。 - **异构集群支持**:支持创建异构构建集群,即可以利用几乎任何计算机(不论操作系统或 CPU 类型)来...

    sql server 2008中的apply运算符使用方法

    `CROSS APPLY`类似于内连接,它返回的是输入查询(通常是一个表)的每一行与应用查询(通常是一个函数或子查询)的结果的交叉组合。这意味着只有当应用查询对输入的每一行都能产生至少一行结果时,`CROSS APPLY`才...

Global site tag (gtag.js) - Google Analytics