[英]SQL: Trying to select 1 random row for each category
我有一个看起来像这样的表:
ID Section AlbumName ImageName
1 Section1 Album1 Image1
2 Section1 Album1 Image2
3 Section1 Album2 Image3
4 Section2 Album3 Image4
5 Section3 Album4 Image5
我想要做的是从每个部分获得1个随机图像,我知道目前我在Album1中只有多个图像,这仅用于测试。
我正在使用的SQL是
Select Distinct g.albumName,
(select top 1 gl.imageName
from Gallery gl
where gl.Section = g.Section
and gl.AlbumName = g.AlbumName
order by newid()
) as imageName
from Gallery g
但这并不总是能给我我期望的结果。 有时它会为Album1返回1个imageName,有时会返回两个imageNames。
如果我自己运行子查询并用section1替换g.section而用Album1替换g.AlbumName然后只返回1个结果,所以我知道它与我使用where条件的方式有关但我只是不确定什么是错的。
任何人都可以建议为什么会发生这种情况以及如何修改查询以获得我需要的内容?
此方法使用Common Table Expression
和Windowing Function
。
WITH records
AS
(
SELECT ID, [Section], AlbumName, ImageName,
ROW_NUMBER() OVER (PARTITION BY [Section] ORDER BY NEWID()) rn
FROM TableName
)
SELECT ID, [Section], AlbumName, ImageName
FROM records
WHERE rn = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.