获取前5名的SQL语句

获取前5名的SQL语句,sql,Sql,我有一张名为ads的表格,我想得到广告来自的前5个国家,以及这5个国家中最受欢迎的部分 例如:印度排名第一,来自印度的用户选择了房地产板块,瑞典排名第二,瑞典热门板块是汽车 表名:ads 如果我理解正确的话,您需要在ads表中出现次数最多的前5个国家,并且对于这些国家中的每一个,您需要显示其最频繁的部分 下面的查询通过按国家对ads表进行分组并对计数排序来选择前5个国家,并使用子查询选择每个国家最受欢迎的部分 SELECT TOP 5 Country , ( SELECT TOP 1 S

我有一张名为ads的表格,我想得到广告来自的前5个国家,以及这5个国家中最受欢迎的部分

例如:印度排名第一,来自印度的用户选择了房地产板块,瑞典排名第二,瑞典热门板块是汽车

表名:ads


如果我理解正确的话,您需要在ads表中出现次数最多的前5个国家,并且对于这些国家中的每一个,您需要显示其最频繁的部分

下面的查询通过按国家对ads表进行分组并对计数排序来选择前5个国家,并使用子查询选择每个国家最受欢迎的部分

SELECT TOP 5 Country , (
    SELECT TOP 1 Section FROM ads a2
    WHERE a2.Country = a1.Country
    GROUP BY Section
    ORDER BY COUNT(*) DESC
) TopSection
FROM ads a1
GROUP BY Country
ORDER BY COUNT(*) DESC
显示前5个国家/地区的前3个部分

SELECT TOP 5 Country , (
    SELECT TOP 1 Section FROM (
        SELECT Section, 
        ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) rank
        FROM ads a2    
        WHERE a2.Country = a1.Country
        GROUP BY Section
    ) t1 WHERE rank = 1
) Top1Section, (
    SELECT TOP 1 Section FROM (
        SELECT Section, 
        ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) rank
        FROM ads a2    
        WHERE a2.Country = a1.Country
        GROUP BY Section
    ) t1 WHERE rank = 2
) Top2Section, (
    SELECT TOP 1 Section FROM (
        SELECT Section, 
        ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) rank
        FROM ads a2    
        WHERE a2.Country = a1.Country
        GROUP BY Section
    ) t1 WHERE rank = 3
) Top3Section
FROM ads a1
GROUP BY Country
ORDER BY COUNT(*) DESC

你们试过什么吗?描述也有点含糊不清。您最好提供示例数据和期望的结果。我不知道这5个国家中最受欢迎的部分是什么意思。来自印度的用户也应该是来自印度的用户吗?嗨,阿里,我试着这样说:从广告中选择前五名国家,但它没有给我每个国家的流行部分,所以我不知道如何做,所以我问专业人士here@Martin史密斯:谢谢你的回复,我想在我的数据库中得到广告来自的前5个国家,我想得到每个国家选出的最多的部分,希望这会更清楚:-当你说前5个国家。。。你只需要五个国家,或者你有前五名的标准吗?因为您的查询选择前5名只得到5行,没有应用任何条件这很令人惊讶,我正在寻找的内容真的非常感谢您,但我可以显示每个国家的前3名部分而不是上面的1名代码再次感谢,但您可以检查它,因为它给我一个错误:Msg 102,级别15,状态1,第4行语法不正确。Msg 156,15级,状态1,第9行关键字“ORDER”附近语法不正确。Msg 102,15级,状态1,第14行“t2”附近的语法不正确。我仍然收到这个错误:-:Msg 102,15级,状态1,第14行“=”附近的语法不正确:-Msg 156,15级,状态1,第15行关键字“WHERE”附近的语法不正确。谢谢!太模糊了!很抱歉打扰你
SELECT TOP 5 Country , (
    SELECT TOP 1 Section FROM (
        SELECT Section, 
        ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) rank
        FROM ads a2    
        WHERE a2.Country = a1.Country
        GROUP BY Section
    ) t1 WHERE rank = 1
) Top1Section, (
    SELECT TOP 1 Section FROM (
        SELECT Section, 
        ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) rank
        FROM ads a2    
        WHERE a2.Country = a1.Country
        GROUP BY Section
    ) t1 WHERE rank = 2
) Top2Section, (
    SELECT TOP 1 Section FROM (
        SELECT Section, 
        ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) rank
        FROM ads a2    
        WHERE a2.Country = a1.Country
        GROUP BY Section
    ) t1 WHERE rank = 3
) Top3Section
FROM ads a1
GROUP BY Country
ORDER BY COUNT(*) DESC
SELECT
    Ad.[Country],
    Ad.[Category]
FROM 
    (SELECT
        [Country],
        [Category],
        RANK() 
        OVER (PARTITION BY [Country] ORDER BY [Country] DESC ) AS RANK
        FROM [Ads]
    ) AS Ad WHERE RANK <= 5