我有一张名为ads
的表格,我希望获得广告来自前5个国家/地区,以及这5个国家/地区中最受欢迎的部分。
例如:印度排名第一,印度用户选择了属性栏目,瑞典排名前2,瑞典热门栏目是汽车,...
表名:ads
[AdsID] Primary key
,[UID]
,[Section]
,[Category]
,[Country]
,[State]
,[City]
,[AdsTit]
,[AdsDesc]
,[AdsPrice]
,[Img1]
,[Img2]
,[Img3]
,[Img4]
,[Img5]
,[Wtags]
,[AdsDate]
,[Website]
,[premium]
答案 0 :(得分:0)
如果我理解正确,您希望在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
答案 1 :(得分:0)
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