https://www.evanmiller.org/how-not-to-sort-by-average-rating.html
Q&A for speakers of other languages learning English
DECLARE @Question tinyint = 1; DECLARE @Answer tinyint = 2; DECLARE @UpMod tinyint = 2; DECLARE @DownMod tinyint = 3; DECLARE @DownWeight int = 5; DECLARE @z numeric(19, 9) = 1.96; DECLARE @zz numeric(19, 9) = SQUARE(@z); WITH TotalUpDownVotesByTags_VIEW AS ( SELECT Tags.TagName , PostTypes.Name AS PostType , COUNT(DISTINCT Posts.Id) AS PostCount , SUM(CASE WHEN Votes.VoteTypeId = @UpMod THEN 1 ELSE 0 END) AS PostUpvotes , SUM(CASE WHEN Votes.VoteTypeId = @DownMod THEN 1 ELSE 0 END) AS PostDownvotes FROM Posts INNER JOIN PostTypes ON Posts.PostTypeId = PostTypes.Id INNER JOIN PostTags ON (CASE WHEN Posts.PostTypeId = @Question THEN Posts.Id WHEN Posts.PostTypeId = @Answer THEN Posts.ParentId END) = PostTags.PostId INNER JOIN Tags ON PostTags.TagId = Tags.Id LEFT JOIN Votes ON Posts.Id = Votes.PostId GROUP BY Tags.TagName, PostTypes.Name ) SELECT TagName , PostType , PostCount , PostUpvotes , PostDownvotes , (CAST(PostUpvotes AS numeric(19, 9)) + @zz / 2) / (CAST(PostUpvotes + PostDownvotes * CASE WHEN PostType = 'Answer' THEN @DownWeight ELSE 1 END AS numeric(19, 9)) + @zz) AS PostRatings FROM TotalUpDownVotesByTags_VIEW ORDER BY PostRatings DESC;