k1dr0ck
k1dr0ck

Reputation: 1215

sum of two columns assigned to a condition

hi im trying to get the total of two columns stored to a name then get a condition but i having error on the 'Rebound' name on line 3

the offreb and defreb has a integer type and some values are stored as 0 (zero)

SELECT team, CONCAT(firstname,' ',lastname) AS name, SUM(offreb + defreb) AS Rebounds
FROM boxscore
WHERE round = 'Finals' AND game = 7 AND Rebounds > 0
ORDER BY team, Rebounds;

Upvotes: 1

Views: 38

Answers (2)

Pranay Velisoju
Pranay Velisoju

Reputation: 29

Here using HAVING clause solves your issue.

If a table has been grouped using GROUP BY, but only certain groups are of interest, the HAVING clause can be used, much like a WHERE clause, to eliminate groups from the result. Official postgres docs

SELECT
  team,
  CONCAT(firstname,' ',lastname) AS name,
  SUM(offreb + defreb) AS "Rebounds"
FROM 
  boxscore
WHERE
  round = 'Finals' AND game = 7
GROUP BY
  team,
  CONCAT(firstname,' ',lastname)
HAVING
  SUM(offreb + defreb) > 0
ORDER BY
  team, "Rebounds";

Note that you cannot use column alias in WHERE and GROUP BY clause, but can be used in ORDER BY clause and wrap double quotes to preserve case-sensitivity.

Upvotes: 1

gotqn
gotqn

Reputation: 43626

You want to filter by column in the WHERE clause which is not yet calculated when the WHERE clause is executed. You can use a sub-query or having.

It should be something like this:

SELECT team, CONCAT(firstname,' ',lastname) AS name, SUM(offreb + defreb) AS Rebounds
FROM boxscore
WHERE round = 'Finals' AND game = 7
GROUP BY team, CONCAT(firstname,' ',lastname)
HAVING SUM(offreb + defreb) > 0
ORDER BY team, Rebounds;

Upvotes: 1

Related Questions