PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 21/06/2012 13:13:21

damalaan
Membre

histoire de count

Bonjour,

j'ai une table qui peut ressembler à ça :

usine,esp
1621;2
1621;1
1622;1
1623;1
1624;2

je veux compter le nb de esp, je fais donc cette requete :

select nb, count(distinct usine)
from tbl_test_tst
group by nb;

ce qui me renvoie :

esp;nb
1;3
2;2

mais je veux aussi savoir combien de usine ont esp en commun : je devrais avoir un résultat de 1 (1621;1 et 1621;2)

merci d'avance

Dernière modification par damalaan (21/06/2012 13:13:55)

Hors ligne

#2 21/06/2012 13:46:19

flo
Membre

Re : histoire de count

damalaan a écrit :

Bonjour,

j'ai une table qui peut ressembler à ça :

usine,esp
1621;2
1621;1
1622;1
1623;1
1624;2

mais je veux aussi savoir combien de usine ont esp en commun : je devrais avoir un résultat de 1 (1621;1 et 1621;2)

J'ai beau me creuser la cervelle, je n'arrive vraiment pas à comprendre ce que vous avez voulu dire.
Pourriez-vous expliquer différemment votre besoin?
Le résultat attendu est-il  :

usine, letrucpascompris
1621;1
1621;2

?

Hors ligne

#3 21/06/2012 14:21:01

damalaan
Membre

Re : histoire de count

leTrucPasCompris est :
le nombre d'usine ayant comme 1 et 2  dans la colonne esp

dans ma minitable (en réel, j'ai qq centaines de lignes!), je n'ai qu'une usine ayant 1 et 2

je peux reformuler différemment pour éviter la confusion avec cette forme::
1621;b
1621;a
1622;a
1623;a
1624;b

combien y a t il d'usine ayant a ET b, réponse 1

Hors ligne

#4 21/06/2012 18:20:08

rjuju
Administrateur

Re : histoire de count

est-ce qu'une requête de ce genre ferait l'affaire ?
SELECT usine
FROM table
group by usine
having count(distinct esp) > 1

Hors ligne

#5 25/06/2012 14:30:40

damalaan
Membre

Re : histoire de count

Finalement, j'ai opté pou ça :

 select count(*) from 
(
select t1.usine from tbl_test_tst t1 inner join tbl_test_tst t2
on t1.usine = t2.usine
WHERE t1.esp=1 and t2.esp =2
) as t;

et j'obtiens bien 1 (1 usine a esp=1 et esp = 2)

La table que j'ai présenté était pour l'exemple, en réalité, j'ai une jointure dès le début, ce qui me donne un truc du genre :

SELECT COUNT(*) FROM 
	(SELECT DISTINCT ta.chf_id, ta.trn_esp 
		FROM 
			(SELECT DISTINCT chf_id, trn_esp 
				FROM 
				tbl_chauffeur_chf t1 INNER JOIN tbl_tournee_trn t2
				ON t1.chf_id = t2.trn_chauffeur
				WHERE trn_date_prel >110400 AND chf_archive = FALSE) ta 
		
			INNER JOIN
		
			(SELECT DISTINCT chf_id, trn_esp 
				FROM 
				tbl_chauffeur_chf t1 INNER JOIN tbl_tournee_trn t2
				ON t1.chf_id = t2.trn_chauffeur
				WHERE trn_date_prel >110400 and chf_archive = FALSE) tb 

			ON ta.chf_id = tb.chf_id

		WHERE ta.trn_esp = 1 and tb.trn_esp=2
	) t;

Le but étant de savoir quel chauffeur a tourné sur trn_esp = 1 ET trn_esp=2

Si vous avez plus simple, je suis preneur!

Hors ligne

Pied de page des forums