【发布时间】:2014-10-21 01:47:35
【问题描述】:
我有一个只有两列的表,用于将 cmets 分配给图像。
第一列包含图片 ID,第二列包含相关评论 ID。一个图像可以有多个 cmets,但每个 cmets 都有一个唯一的评论 ID。
基于此,我希望根据每张图像的 cmets 数量按降序排列,因此 cmets 最多的图像应显示在顶部。
我尝试了以下方法,但 SQL 不接受 Distinct 和 XML 的组合。在这里使用 Distinct 的想法是消除重复,因为我只希望 每个图像在结果中出现一次。
我怎样才能做到这一点?
我的 SQL:
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT Top 20 A.imgID,
COUNT(*) OVER() AS volume,
(
SELECT B.commentID,
COUNT(*) OVER() AS volume
FROM MOC_ImgComments B
WHERE B.imgID = A.imgID
FOR XML PATH(''), ELEMENTS, TYPE
)
FROM MOC_ImgComments A
ORDER BY volume desc, A.imgID
FOR XML PATH('images'), ELEMENTS, TYPE, ROOT('ranks')
END
【问题讨论】:
-
您需要通过 a.imgID 添加一个组到您的主查询。您可能还想在子查询中添加 order by 来控制顺序。
-
谢谢!关于子查询,我想我可以跳过 Order By,因为我只需要那里的音量。对于主要查询,我只需要按 img ID 分组就可以了吗?
标签: sql sql-server select count distinct