Search code examples
sqlt-sqldataexplorer

How to multiply 2 columns?


I'm making a Query on Data Explorer:

SELECT
  Name,
  COUNT(*) Qty,
  Points = CASE Name
    WHEN 'Altruist' THEN 5
    WHEN 'Analytical' THEN 5
    WHEN 'Announcer' THEN 5
    WHEN 'Autobiographer' THEN 5
    WHEN 'Benefactor' THEN 5
    WHEN 'Caucus' THEN 5
    WHEN 'Citizen Patrol' THEN 5
    WHEN 'Cleanup' THEN 5
    WHEN 'Commentator' THEN 5
    WHEN 'Critic' THEN 5
    WHEN 'Custodian' THEN 5
    WHEN 'Disciplined' THEN 5
    WHEN 'Editor' THEN 5
    WHEN 'Excavator' THEN 5
    WHEN 'Informed' THEN 5
    WHEN 'Investor' THEN 5
    WHEN 'Mortarboard' THEN 5
    WHEN 'Nice Answer' THEN 5
    WHEN 'Nice Question' THEN 5
    WHEN 'Organizer' THEN 5
    WHEN 'Peer Pressure' THEN 5
    WHEN 'Popular Question' THEN 5
    WHEN 'Precognitive' THEN 5
    WHEN 'Promotor' THEN 5
    WHEN 'Proofreader' THEN 5
    WHEN 'Quorum' THEN 5
    WHEN 'Revival' THEN 5
    WHEN 'Scholar' THEN 5
    WHEN 'Self-Learner' THEN 5
    WHEN 'Student' THEN 5
    WHEN 'Suffrage' THEN 5
    WHEN 'Supporter' THEN 5
    WHEN 'Synonymizer' THEN 5
    WHEN 'Tag Editor' THEN 5
    WHEN 'Talkative' THEN 5
    WHEN 'Teacher' THEN 5
    WHEN 'Tumbleweed' THEN 5
    WHEN 'Vox Populi' THEN 5
    WHEN 'Archaeologist' THEN 10
    WHEN 'Beta' THEN 10
    WHEN 'Booster' THEN 10
    WHEN 'Civic Duty' THEN 10
    WHEN 'Constituent' THEN 10
    WHEN 'Convention' THEN 10
    WHEN 'Deputy' THEN 10
    WHEN 'Enlightened' THEN 10
    WHEN 'Enthusiast' THEN 10
    WHEN 'Epic' THEN 10
    WHEN 'Favorite Question' THEN 10
    WHEN 'Generalist' THEN 10
    WHEN 'Good Answer' THEN 10
    WHEN 'Good Question' THEN 10
    WHEN 'Guru' THEN 10
    WHEN 'Necromancer' THEN 10
    WHEN 'Notable Question' THEN 10
    WHEN 'Outspoken' THEN 10
    WHEN 'Pundit' THEN 10
    WHEN 'Research Assistant' THEN 10
    WHEN 'Reviewer' THEN 10
    WHEN 'Sportsmanship' THEN 10
    WHEN 'Strunk & White' THEN 10
    WHEN 'Taxonomist' THEN 10
    WHEN 'Tenacious' THEN 10
    WHEN 'Yearling' THEN 10
    WHEN 'Copy Editor' THEN 20
    WHEN 'Electorate' THEN 20
    WHEN 'Famous Question' THEN 20
    WHEN 'Fanatic' THEN 20
    WHEN 'Great Answer' THEN 20
    WHEN 'Great Question' THEN 20
    WHEN 'Legendary' THEN 20
    WHEN 'Marshal' THEN 20
    WHEN 'Populist' THEN 20
    WHEN 'Publicist' THEN 20
    WHEN 'Reversal' THEN 20
    WHEN 'Stellar Question' THEN 20
    WHEN 'Steward' THEN 20
    WHEN 'Unsung Hero' THEN 20
    ELSE 0
  END,
  Qty * Points AS Total
FROM Badges
WHERE UserId = 1563422
GROUP BY Name
ORDER BY COUNT(*) DESC

This all works except for when , Qty * Points AS Total is added (take that away from the query above to run the query successfully).

The error I get is:

Invalid column name 'Qty'.

Invalid column name 'Points'.

How can I multiply Qty and Points as Total?


Solution

  • Use a subquery, or a CTE like this:

    WITH CTE
    AS
    (
      SELECT
        Name,
        COUNT(*) Qty,
        Points = CASE Name
          WHEN 'Altruist' THEN 5
          WHEN 'Analytical' THEN 5
          WHEN 'Announcer' THEN 5
          WHEN 'Autobiographer' THEN 5
          WHEN 'Benefactor' THEN 5
          WHEN 'Caucus' THEN 5
          WHEN 'Citizen Patrol' THEN 5
          WHEN 'Cleanup' THEN 5
          WHEN 'Commentator' THEN 5
          WHEN 'Critic' THEN 5
          WHEN 'Custodian' THEN 5
          WHEN 'Disciplined' THEN 5
          WHEN 'Editor' THEN 5
          WHEN 'Excavator' THEN 5
          WHEN 'Informed' THEN 5
          WHEN 'Investor' THEN 5
          WHEN 'Mortarboard' THEN 5
          WHEN 'Nice Answer' THEN 5
          WHEN 'Nice Question' THEN 5
          WHEN 'Organizer' THEN 5
          WHEN 'Peer Pressure' THEN 5
          WHEN 'Popular Question' THEN 5
          WHEN 'Precognitive' THEN 5
          WHEN 'Promotor' THEN 5
          WHEN 'Proofreader' THEN 5
          WHEN 'Quorum' THEN 5
          WHEN 'Revival' THEN 5
          WHEN 'Scholar' THEN 5
          WHEN 'Self-Learner' THEN 5
          WHEN 'Student' THEN 5
          WHEN 'Suffrage' THEN 5
          WHEN 'Supporter' THEN 5
          WHEN 'Synonymizer' THEN 5
          WHEN 'Tag Editor' THEN 5
          WHEN 'Talkative' THEN 5
          WHEN 'Teacher' THEN 5
          WHEN 'Tumbleweed' THEN 5
          WHEN 'Vox Populi' THEN 5
          WHEN 'Archaeologist' THEN 10
          WHEN 'Beta' THEN 10
          WHEN 'Booster' THEN 10
          WHEN 'Civic Duty' THEN 10
          WHEN 'Constituent' THEN 10
          WHEN 'Convention' THEN 10
          WHEN 'Deputy' THEN 10
          WHEN 'Enlightened' THEN 10
          WHEN 'Enthusiast' THEN 10
          WHEN 'Epic' THEN 10
          WHEN 'Favorite Question' THEN 10
          WHEN 'Generalist' THEN 10
          WHEN 'Good Answer' THEN 10
          WHEN 'Good Question' THEN 10
          WHEN 'Guru' THEN 10
          WHEN 'Necromancer' THEN 10
          WHEN 'Notable Question' THEN 10
          WHEN 'Outspoken' THEN 10
          WHEN 'Pundit' THEN 10
          WHEN 'Research Assistant' THEN 10
          WHEN 'Reviewer' THEN 10
          WHEN 'Sportsmanship' THEN 10
          WHEN 'Strunk & White' THEN 10
          WHEN 'Taxonomist' THEN 10
          WHEN 'Tenacious' THEN 10
          WHEN 'Yearling' THEN 10
          WHEN 'Copy Editor' THEN 20
          WHEN 'Electorate' THEN 20
          WHEN 'Famous Question' THEN 20
          WHEN 'Fanatic' THEN 20
          WHEN 'Great Answer' THEN 20
          WHEN 'Great Question' THEN 20
          WHEN 'Legendary' THEN 20
          WHEN 'Marshal' THEN 20
          WHEN 'Populist' THEN 20
          WHEN 'Publicist' THEN 20
          WHEN 'Reversal' THEN 20
          WHEN 'Stellar Question' THEN 20
          WHEN 'Steward' THEN 20
          WHEN 'Unsung Hero' THEN 20
          ELSE 0
        END
      FROM Badges
      WHERE UserId = 1563422
      GROUP BY Name
      )
      SELECT *, QTY * Points AS Total
      FROM CTE;
    

    Updated Demo on Data Explorer