Aggregates not allowed in WHERE clause?

Started by Fransover 21 years ago4 messagesgeneral
Jump to latest
#1Frans
fransgunawan@gmail.com

Hi All,

I have a table (table info) with 2 column, column 'name' and column 'quantity'.

name | quantity
--------------------------
a | 5
b | 3
a | 3
c | 4
b | 6

If I want to sum the sum of all entry in table.

name | quantity
------------------------
a | 8
b | 9
c | 4

I can use : select name, sum(quantity) from info group by name;

I want to show the sum of all entry that bigger than 5
name | quantity
------------------------
a | 8
b | 9

I try to use : select name, sum(quantity) from info where
sum(quantity)>20 group by name;
This yields the message: 'Aggregates not allowed in WHERE clause'.

Can somebody help me here....

thx,

Frans

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Frans (#1)
Re: Aggregates not allowed in WHERE clause?

Frans <fransgunawan@gmail.com> writes:

I try to use : select name, sum(quantity) from info where
sum(quantity)>20 group by name;
This yields the message: 'Aggregates not allowed in WHERE clause'.

Can somebody help me here....

See
http://www.postgresql.org/docs/7.4/static/tutorial-agg.html
particularly the next-to-last paragraph.

regards, tom lane

#3Michael Fuhr
mike@fuhr.org
In reply to: Frans (#1)
Re: Aggregates not allowed in WHERE clause?

On Thu, Dec 16, 2004 at 12:02:34PM +0700, Frans wrote:

I try to use : select name, sum(quantity) from info where
sum(quantity)>20 group by name;
This yields the message: 'Aggregates not allowed in WHERE clause'.

For aggregates use HAVING, not WHERE:

SELECT name, SUM(quantity)
FROM info
GROUP BY name
HAVING SUM(quantity) > 20;

http://www.postgresql.org/docs/7.4/static/tutorial-agg.html
http://www.postgresql.org/docs/7.4/static/queries-table-expressions.html#QUERIES-GROUP
http://www.postgresql.org/docs/7.4/static/sql-select.html

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

#4Chris Browne
cbbrowne@acm.org
In reply to: Frans (#1)
Re: Aggregates not allowed in WHERE clause?

A long time ago, in a galaxy far, far away, fransgunawan@gmail.com (Frans) wrote:

This yields the message: 'Aggregates not allowed in WHERE clause'.

Can somebody help me here....

What it says is right; SQL does not permit using aggregates in the
WHERE clause.

You need to look at the HAVING clause which is, more or less, the
equivalent to WHERE specifically for use with aggregates...
--
(format nil "~S@~S" "cbbrowne" "gmail.com")
http://www.ntlug.org/~cbbrowne/nonrdbms.html
"If use of the GPL filters out people who are only interested in
inventing the worst possible motives for my actions then, yes, I'm
happy to learn that it serves a useful purpose I'd never thought of."
-- Dave Pearson