Re: Re: [pgsql-fr-generale] Comparer des valeurs booléennes

Lists: pgsql-fr-generale
From: "Remi" <remi(at)chillet(dot)com>
To: <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Comparer des valeurs booléennes
Date: 2004-02-19 22:16:25
Message-ID: 003301c3f736$03f3f480$b3952350@dev
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-fr-generale

Bonsoir,

J'ai besoin dans une requete de comparer des valeurs booléennes

SELECT max(bool1), max(bool2) FROM table WHERE condition;

En fait j'aimerai effectuer un 'AND' a la palce du 'max' pour avoir comme resultat : true AND false = true. Pour resumer si j'ai uniquement des false dans la colonne j'aurais comme resulta false. Si j'ai au mojns un true dans la colonne j'aurais comme resulta true. Comment puis faire cette requete car bien evidemment celle de l'exemple me donne une erreur. J'ai essaye aussi de convertir la valeur booléenne en entier mais rien a faire:

SELECT max(CAST(bool1 AS int)), max(CAST(bool2 AS int)) FROM table WHERE condition;

Merci pour vos idees

Remi


From: Francois Suter <dba(at)paragraf(dot)ch>
To: Remi <remi(at)chillet(dot)com>
Cc: <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: Comparer des valeurs booléennes
Date: 2004-02-20 11:21:49
Message-ID: F99ED9B8-6396-11D8-BBBF-000393427520@paragraf.ch
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-fr-generale

> SELECT max(bool1), max(bool2) FROM table WHERE condition;
>  
> En fait j'aimerai effectuer un 'AND' a la palce du 'max' pour avoir
> comme resultat : true AND false = true. Pour resumer si j'ai
> uniquement des false dans la colonne j'aurais comme resulta false. Si
> j'ai au mojns un true dans la colonne j'aurais comme resulta true.
> Comment puis faire cette requete car bien evidemment celle de
> l'exemple me donne une erreur. J'ai essaye aussi de convertir la
> valeur booléenne en entier mais rien a faire:

Euh, ben, si tu veux faire un AND, il suffit de le faire:

select bool1 AND bool2 from table;

Ca marche. En tout cas, avec PostgreSQL 7.3.4.

Ceci dit, il me semble que ce que tu veux est un OR, mais ça marche
aussi:

test=> select * from bouboul;
col1 | col2
------+------
t | t
t | f
f | t
f | f
(4 rows)

test=> select col1 OR col2 from bouboul;
?column?
----------
t
t
t
f
(4 rows)

Au fait, tu ne voudrais pas t'inscrire à la liste? Ce serait plus
simple. Là, je suis obligé de valider manuellement chacun de tes
mails... Il suffit d'envoyer un mail à l'adresse suivante:

pgsql-fr-generale(at)postgresql(dot)org

sans sujet et avec la commande suivante dans le corps du mail:

subscribe pgsql-fr-generale remi(at)chillet(dot)com

A+

---------------
Francois

Home page: http://www.monpetitcoin.com/

"Nous sommes peu à penser trop, trop à penser peu." - Françoise Sagan


From: "Remi" <remi(at)chillet(dot)com>
To: "Francois Suter" <dba(at)paragraf(dot)ch>
Cc: <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: [pgsql-fr-generale] Comparer des valeurs booléennes
Date: 2004-02-24 23:41:16
Message-ID: 007901c3fb2f$b313cd80$b3952350@dev
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-fr-generale

Bonsoir,

Oui effectivement le resonnement est juste dans ton exemple mai j'ai besoin
de comparer les resultats de toutes les lignes d'une colonne. Je veux un OR
en effet:

col1 | col2
------+------
t | f
t | f
f | f
f | f

t |f --> Voila le resultat que je recherche

Il y a bien la solution de remplacer true et false par 1 et 0 et de par le
fait

SELECT max(col1), max(col2) FROM table WHERE condition

fonctionnerai mais je prefererais trouver une solution avec les valeurs
booléennes ;-)

----- Original Message -----
From: "Francois Suter" <dba(at)paragraf(dot)ch>
To: "Remi" <remi(at)chillet(dot)com>
Cc: <pgsql-fr-generale(at)postgresql(dot)org>
Sent: Friday, February 20, 2004 12:21 PM
Subject: Re: [pgsql-fr-generale] Comparer des valeurs booléennes

> > SELECT max(bool1), max(bool2) FROM table WHERE condition;
> >
> > En fait j'aimerai effectuer un 'AND' a la palce du 'max' pour avoir
> > comme resultat : true AND false = true. Pour resumer si j'ai
> > uniquement des false dans la colonne j'aurais comme resulta false. Si
> > j'ai au mojns un true dans la colonne j'aurais comme resulta true.
> > Comment puis faire cette requete car bien evidemment celle de
> > l'exemple me donne une erreur. J'ai essaye aussi de convertir la
> > valeur booléenne en entier mais rien a faire:
>
> Euh, ben, si tu veux faire un AND, il suffit de le faire:
>
> select bool1 AND bool2 from table;
>
> Ca marche. En tout cas, avec PostgreSQL 7.3.4.
>
> Ceci dit, il me semble que ce que tu veux est un OR, mais ça marche
> aussi:
>
> test=> select * from bouboul;
> col1 | col2
> ------+------
> t | t
> t | f
> f | t
> f | f
> (4 rows)
>
> test=> select col1 OR col2 from bouboul;
> ?column?
> ----------
> t
> t
> t
> f
> (4 rows)


From: Francois Suter <dba(at)paragraf(dot)ch>
To: "Remi" <remi(at)chillet(dot)com>
Cc: <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: Comparer des valeurs booléennes
Date: 2004-02-27 12:28:39
Message-ID: 7900025E-6920-11D8-AA13-000393427520@paragraf.ch
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-fr-generale

Salut,

> Oui effectivement le resonnement est juste dans ton exemple mai j'ai
> besoin
> de comparer les resultats de toutes les lignes d'une colonne. Je veux
> un OR
> en effet:

Ah oui, je comprends la différence, maintenant. A mon avis, ce n'est
pas possible de manière simple. Je pense qu'il faut écrire une fonction
en PL/PgSQL ou autre langage supporté par PostgreSQL, mais je n'ai
encore jamais fait ça et je ne saurais pas comment m'y prendre.

Quelqu'un s'y connaît là?

A+

---------------
Francois

Home page: http://www.monpetitcoin.com/

"Nous sommes peu à penser trop, trop à penser peu." - Françoise Sagan


From: Hervé Piedvache <herve(at)elma(dot)fr>
To: "Remi" <remi(at)chillet(dot)com>, "Francois Suter" <dba(at)paragraf(dot)ch>
Cc: <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: Re: [pgsql-fr-generale] Comparer des valeurs booléennes
Date: 2004-02-27 17:58:06
Message-ID: 200402271858.06282.herve@elma.fr
Views: Whole Thread | Raw Message | Download mbox | Resend email
Lists: pgsql-fr-generale

Remi,

Je ne sais pas bien si ca répond à ton problème, mais est-ce que cette
solution te satisfait ?

select case when exists (select 'x' from table where col1='t') then 't' else
'f' end as col1, case when exists (select 'x' from table where col2='t') then
't' else 'f' end as col2

Cordialement,

Le Mercredi 25 Février 2004 00:41, Remi a écrit :
> Bonsoir,
>
> Oui effectivement le resonnement est juste dans ton exemple mai j'ai
> besoin de comparer les resultats de toutes les lignes d'une colonne. Je
> veux un OR en effet:
>
> col1 | col2
> ------+------
> t | f
> t | f
> f | f
> f | f
>
> t |f --> Voila le resultat que je recherche
>
> Il y a bien la solution de remplacer true et false par 1 et 0 et de par le
> fait
>
> SELECT max(col1), max(col2) FROM table WHERE condition
>
> fonctionnerai mais je prefererais trouver une solution avec les valeurs
> booléennes ;-)
>
>
>
> ----- Original Message -----
> From: "Francois Suter" <dba(at)paragraf(dot)ch>
> To: "Remi" <remi(at)chillet(dot)com>
> Cc: <pgsql-fr-generale(at)postgresql(dot)org>
> Sent: Friday, February 20, 2004 12:21 PM
> Subject: Re: [pgsql-fr-generale] Comparer des valeurs booléennes
>
> > > SELECT max(bool1), max(bool2) FROM table WHERE condition;
> > >
> > > En fait j'aimerai effectuer un 'AND' a la palce du 'max' pour avoir
> > > comme resultat : true AND false = true. Pour resumer si j'ai
> > > uniquement des false dans la colonne j'aurais comme resulta false. Si
> > > j'ai au mojns un true dans la colonne j'aurais comme resulta true.
> > > Comment puis faire cette requete car bien evidemment celle de
> > > l'exemple me donne une erreur. J'ai essaye aussi de convertir la
> > > valeur booléenne en entier mais rien a faire:
> >
> > Euh, ben, si tu veux faire un AND, il suffit de le faire:
> >
> > select bool1 AND bool2 from table;
> >
> > Ca marche. En tout cas, avec PostgreSQL 7.3.4.
> >
> > Ceci dit, il me semble que ce que tu veux est un OR, mais ça marche
> > aussi:
> >
> > test=> select * from bouboul;
> > col1 | col2
> > ------+------
> > t | t
> > t | f
> > f | t
> > f | f
> > (4 rows)
> >
> > test=> select col1 OR col2 from bouboul;
> > ?column?
> > ----------
> > t
> > t
> > t
> > f
> > (4 rows)
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

--
Hervé Piedvache

Elma Ingénierie Informatique
6 rue du Faubourg Saint-Honoré
F-75008 - Paris - France
Pho. 33-144949901
Fax. 33-144949902