Tag Rankings Fun

1

Please login or register to vote for this query.

(click on this box to dismiss)

Put banks in for Tag Name for all. Tag names should be in lower case Put 0 for user ID for all users

Stack Overflow

Q&A for professional and enthusiast programmers

-- Tag Rankings Fun
-- Put banks in for Tag Name for all. Tag names should be in lower case
-- Put 0 for user ID for all users

DECLARE @tagName varchar(255) 
DECLARE @tagInput bit
SET @tagname = rtrim(##TagName:string##)
DECLARE @UserID int = ##UserId##

IF RTRIM(@tagname) = ''

   SET @tagInput = 0 
ELSE
   SET @tagInput = 1
 
if @tagInput  = 0 and @UserID = 0 
  SELECT 'Don' + '''' + 't do that'
ELSE 
 
WITH UserTagScores
as 
(SELECT  
   a.OwnerUserId,
   t.TagName,
   SUM(CASE v.VoteTypeID
           WHEN 2 THEN 1
           WHEN 3 THEN  -1
   END) as  score

FROM 
   votes v
   INNER JOIN Posts a
   ON v.PostID = a.ID
   INNER JOIN Posts q
   ON a.parentId = q.id
   INNER JOIN PostTags pt
   ON q.id = pt.PostId
   INNER JOIN Tags T
   ON pt.TagId = t.id
WHERE
   v.voteTypeId in (2,3)  -- Up and down votes
   and
   a.PostTypeID = 2  -- Answers only
   AND
   (a.CommunityOwnedDate is null or 
    a.CommunityOwnedDate > v.CreationDate)
   AND 
   (@tagInput = 0
    or t.TagName = @TagName)
    AND a.OwnerUserId is not null
GROUP BY
   a.OwnerUserId,
   t.TagName)
, userTagRank as (
 SELECT
    TagName,
   OwnerUserId,
    rank() over (partition by TagName order by score desc) rank,

Score
  FROM
    UserTagScores)
SELECT 
    TagName,
    Rank,
    OwnerUserId ,
    OwnerUserId [User Link],
    Score
FROM
    userTagRank 
WHERE 
    (OwnerUserId = @UserID or @UserID = 0)
ORDER BY
    TagName,
    rank
  

Enter Parameters

Options:
Switch sites:
loading Hold tight while we fetch your results