You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server 2012中从数据库选取3款最畅销产品?

解决SQL Server 2012中获取前三畅销产品的问题

嘿,这个需求太常见了!之前用MAX()只能揪出销量最高的那一款,要拿前三的话,SQL Server 2012给了我们好几个实用的方案,我给你拆解一下:

方案1:最简单的TOP 3 + ORDER BY

如果你的需求是直接取销量最高的前3条记录,不管有没有并列情况,这个方法最直接高效:

SELECT TOP 3 product_name, sales_amount
FROM products
ORDER BY sales_amount DESC;

注意:如果有多个产品销量和第三名持平,这个语句只会返回其中一部分(总共3条),因为TOP是严格限制返回行数的。

方案2:用ROW_NUMBER()窗口函数实现唯一排名

要是你需要给每个产品分配唯一的排名(哪怕销量相同,排名也不一样),就用ROW_NUMBER()窗口函数:

SELECT product_name, sales_amount, rank_num
FROM (
    SELECT 
        product_name, 
        sales_amount,
        -- 按销量倒序生成唯一排名
        ROW_NUMBER() OVER (ORDER BY sales_amount DESC) AS rank_num
    FROM products
) ranked_products
WHERE rank_num <= 3;

举个例子:如果有两款产品销量都是第一,它们的排名会分别是1和2,最终结果只会包含排名1、2、3的三个产品,不会出现并列同排名的情况。

方案3:用DENSE_RANK()处理并列排名

如果想把所有销量进入前三梯队的产品都捞出来(比如多个并列第一、并列第二的情况),就用DENSE_RANK():

SELECT product_name, sales_amount, rank_num
FROM (
    SELECT 
        product_name, 
        sales_amount,
        -- 相同销量的产品会获得相同排名,排名不会跳号
        DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS rank_num
    FROM products
) ranked_products
WHERE rank_num <= 3;

比如:如果有两款产品销量第一(排名1),一款第二(排名2),两款第三(排名3),这个语句会返回所有这5款产品,因为它们的排名都≤3。

你可以根据自己的业务需求选对应的方法就行!

内容的提问来源于stack exchange,提问作者Sai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:02:15