【发布时间】:2025-12-17 23:10:02
【问题描述】:
我不是编写 sql 查询的专家。我目前想出了一个存储过程。当我没有应用内部联接时,存储过程工作正常。我有两张桌子。
表 1:产品 表 2:产品评级
存储过程用于逐页选择记录。我是通过查阅在线文章创建的。下面会提到存储过程的主体,
SELECT ROW_NUMBER() OVER (ORDER BY [PostedDate] Desc)AS RowNumber,[Products].[Id], [Name], [Description], [PostedDate],
ISNULL(AVG([ProductRating].[RatingValue]), 0) AverageRating, COUNT([Rating].[RatingValue]) RatingCount
INTO #DealResults1
FROM [Products]
LEFT OUTER JOIN [Rating] ON [Product].[Id] = [Rating].[ProductId]
WHERE [City] = CASE WHEN @CityId IS NULL THEN [City] ELSE @CityId END
AND [Description] IS NOT NULL
Group by [Products].[Id], [Name], [Description], [PostedDate], [Rating].[RatingValue]
ORDER BY [PostedDate] Desc
DECLARE @RecordCount1 INT
SELECT @RecordCount1 = COUNT(*) FROM #ProductResults1
SET @PageCount = CEILING(CAST(@RecordCount1 AS DECIMAL(10, 2)) / CAST(@PageSize AS DECIMAL(10, 2)))
PRINT @PageCount
SELECT * FROM #ProductResults1
WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
DROP TABLE #ProductResults1
现在我承认我在加入方面很穷,我从来没有完全了解 Group by。
问题陈述: 当用户对产品进行评分时,每次都会在评分表中插入一条记录。现在,如果用户对 Product1 进行了三次评价,那么 Product 被选择了 3 次。有时两次。我不明白这个问题。请帮我解决这个问题。
【问题讨论】:
-
可能
PostedDate列属于Rating 表,您将它用于GROUP BYclause。因此它将按评级重复产品,因为您有不同的日期/时间...... -
仅按产品表中的列分组。您正在分组中添加 [Rating].[RatingValue]。示例:按 [Products].[Id]、[Name]、[Description]、[PostedDate] 分组
-
谢谢你们。是的@Sandeep,在从 Group By 中删除 [Rating].[RatingValue] 之后,您就对了,现在问题已经解决了。我会更多地研究它以了解它。如果您可以将其发布为答案,那么我将能够将其标记为答案。如果您可以添加几行描述此行为,请多多关照。问候,
标签: sql asp.net sql-server stored-procedures