获取前 5 名的 SQL 语句
Posted
技术标签:
【中文标题】获取前 5 名的 SQL 语句【英文标题】:SQL statement for getting top 5 【发布时间】:2014-06-29 00:06:46 【问题描述】:我有一张名为 ads
的表格,我想获取广告来自的前 5 个国家/地区,以及这 5 个国家/地区中每个国家/地区最受欢迎的部分。
例如:印度排名第一,来自印度的用户选择了属性部分,瑞典排名第二,瑞典热门部分是汽车,...
表名:ads
[AdsID] Primary key
,[UID]
,[Section]
,[Category]
,[Country]
,[State]
,[City]
,[AdsTit]
,[AdsDesc]
,[AdsPrice]
,[Img1]
,[Img2]
,[Img3]
,[Img4]
,[Img5]
,[Wtags]
,[AdsDate]
,[Website]
,[premium]
【问题讨论】:
你有没有尝试过任何东西? 描述也有些模棱两可和不清楚。您最好提供示例数据和期望的结果。例如,我不知道the most popular section in each of those 5 countries counties
是什么意思。 user from India
也应该是 users from India
?
嗨 Ali 我试试这个说法:Select Top 5 Country,Section from ads 但它没有给我每个国家的热门部分,所以我不知道该怎么做,所以我问专业人士这里
@Martin Smith 感谢您的回复,我想在我的数据库中获得广告来自的前 5 个国家,并且我想获得每个国家选择的最多的部分,希望会更清楚:-)
当您说前 5 个国家时...您只需要任何五个国家或您是否也有前 5 个国家的标准?因为您的查询 Select top 5 只是得到 5 行,没有应用条件
【参考方案1】:
如果我理解正确,您希望在 ads
表中出现次数最多的前 5 个国家/地区,并且对于这些国家/地区中的每一个您希望显示其最频繁的部分。
下面的查询通过按国家/地区对广告表进行分组并排序计数来选择前 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
【讨论】:
这真是太棒了,我正在寻找的东西真的很感谢你,但是我可以显示每个国家的前 3 个部分而不是上面代码中的 1 个 再次感谢,但您能否检查一下,因为它给了我一个错误:Msg 102, Level 15, State 1, Line 4 Incorrect syntax near '('. Msg 156, Level 15, State 1, Line 9 关键字“ORDER”附近的语法不正确。消息 102,级别 15,状态 1,第 14 行“t2”附近的语法不正确。 我仍然收到此错误 :-( : Msg 102, Level 15, State 1, Line 14 '=' 附近的语法不正确。 :-(((Msg 156, Level 15, State 1, Line 15 关键字“WHERE”附近的语法不正确。 thanksssssssss sooooooo much FuzzyTree 我真的很抱歉打扰你【参考方案2】: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
【讨论】:
以上是关于获取前 5 名的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章