Обсуждение: Conditional on Select List
Is it possible to do this?
SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table;
What I want is to return a boolean, but when I tried SELECT COUNT(colname)::BOOLEAN FROM table; it says it cannot cast bigint to boolean.
Is there such IF function or do I have to create my own.
Thank you.
SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table;
What I want is to return a boolean, but when I tried SELECT COUNT(colname)::BOOLEAN FROM table; it says it cannot cast bigint to boolean.
Is there such IF function or do I have to create my own.
Thank you.
Fernando, the "IF" function is called CASE WHEN condition THEN result [WHEN ...] [ELSE result] END read about it at http://www.postgresql.org/docs/8.3/static/functions-conditional.html best wishes, Harald On Tue, May 13, 2008 at 5:52 PM, Fernando <fernando@ggtours.ca> wrote: > > Is it possible to do this? > > SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table; > > What I want is to return a boolean, but when I tried SELECT > COUNT(colname)::BOOLEAN FROM table; it says it cannot cast bigint to > boolean. > > Is there such IF function or do I have to create my own. > > Thank you. > -- GHUM Harald Massa persuadere et programmare Harald Armin Massa Spielberger Straße 49 70435 Stuttgart 0173/9409607 fx 01212-5-13695179 - EuroPython 2008 will take place in Vilnius, Lithuania - Stay tuned!
Fernando wrote: > Is it possible to do this? > > SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table; > > What I want is to return a boolean, but when I tried SELECT > COUNT(colname)::BOOLEAN FROM table; it says it cannot cast bigint to > boolean. > > Is there such IF function or do I have to create my own. Look up CASE in the docs.. Joshua D. Drake
On Tue, May 13, 2008 at 11:52:24AM -0400, Fernando wrote: > Is it possible to do this? > > SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table; > > What I want is to return a boolean, but when I tried SELECT > COUNT(colname)::BOOLEAN FROM table; it says it cannot cast bigint to > boolean. Why not just do something like this? SELECT COUNT(colname) > 0 AS colname FROM table; If you want a real conditional statement, CASE is probably what you want: SELECT CASE WHEN COUNT(colname) > 0 THEN TRUE ELSE FALSE END AS colname FROM table; Note that the ELSE clause is executed when the expression evaluates to either NULL or FALSE, but because COUNT never returns a NULL value it doesn't matter here. It's also possible to have multiple WHEN clauses. Sam
> > Is it possible to do this? > > SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table; > > What I want is to return a boolean, but when I tried SELECT > COUNT(colname)::BOOLEAN FROM table; it says it cannot cast bigint to > boolean. > How about this? Logic al expresses are already returned as Boolean. Select COUNT(colname) > 0 AS colname FROM table
Fernando <fernando@ggtours.ca> writes: > Is it possible to do this? > SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table; SELECT COUNT(colname) > 0 AS colname FROM table; If you really like to type, you could use a CASE expression. regards, tom lane
On Tue, May 13, 2008 at 11:52 AM, Fernando <fernando@ggtours.ca> wrote: > > Is it possible to do this? > > SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table; You should be able to use CASE for this. -Doug
On Tue, May 13, 2008 at 8:52 AM, Fernando <fernando@ggtours.ca> wrote: > SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table; A rewrite of this query might do what you want: SELECT colname_cnt > 0 AS Greaterthanzero FROM ( SELECT COUNT( colname ) AS colname_cnt FROM Table ); or SELECT CASE COUNT( colname ) WHEN > 0 THEN TRUE ELSE FALSE END AS GreaterThanZero FROM Table; -- Regards, Richard Broersma Jr. Visit the Los Angles PostgreSQL Users Group (LAPUG) http://pugs.postgresql.org/lapug
Thanks this is exactly what I need it.
Fernando
Tom Lane wrote:
Fernando
Tom Lane wrote:
Fernando <fernando@ggtours.ca> writes:Is it possible to do this? SELECT IF(COUNT(colname) > 0, TRUE, FALSE) AS colname FROM table;SELECT COUNT(colname) > 0 AS colname FROM table; If you really like to type, you could use a CASE expression. regards, tom lane