[challenge] [résolu] Requete SQL galere

WRInaute discret
Hello,

J'ai une requete sur laquelle je bute depuis un bon moment... j'utilise MySQL 4.1 (je peux pas upgrader) et je ne sais meme pas si c'est possible avec cette version.

Je fais donc appel aux Pros qui sont dans la place...

Voila la structure de ma table : REGLEMENTS : ID/TYPE/MONTANT/PERSONNE

les enregistrements de la table ont 2 types possibles : IMPAYE ou REGLEMENT et ont toutes un montant.

Je voudrais connaitre le nombre de PERSONNES , où la somme des reglements est inferieure à la somme des impayes (balance negative).

j'arrive a avoir la liste des enregistrements concernés :

Code:
SELECT  REGLEMENTS.PERSONNE FROM  REGLEMENTS  group by REGLEMENTS.PERSONNE having (SUM(IF(REGLEMENTS.TYPE = 'REGLEMENT', MONTANT,0))<SUM(IF(REGLEMENTS.TYPE = 'IMPAYE', MONTANT,0)))

mais impossible d'avoir directement le nombre de lignes avec un

Code:
SELECT COUNT(DISTINCT REGLEMENTS.PERSONNE)...

car ca me fait n lignes avec "1"...je suis paumé...

surement que la structure de la table n'est pas idéale, mais ce n'est pas la question (suggestions bienvenues)

c'est une solution 'pure SQL' que je cherche, pas du PHP...merci
 
WRInaute impliqué
Bjr,

je ne suis pas sur d'avori tout compris, mais si tu veux la personne et le nombre ds ta table du genre
AAAA : 12
BBBBB : 23
etc.....

tu peux essayer ca :

Code:
SELECT REGLEMENTS.PERSONNE,COUNT(*)    
FROM REGLEMENTS
GROUP BY REGLEMENTS.PERSONNE;

Bon courage.
 
WRInaute discret
merci de ton aide mais c'est bien plus compliqué :

je veux le nombre de personnes qui ont une balance négative (pas la liste, ca je l'ai deja)

thx anyway

HELP please, j'ai bientot plus de cheveux
 
WRInaute discret
Oula

Code:
SELECT COUNT(SELECT  REGLEMENTS.PERSONNE FROM  REGLEMENTS  group by REGLEMENTS.PERSONNE having (SUM(IF(REGLEMENTS.TYPE = 'REGLEMENT', MONTANT,0))<SUM(IF(REGLEMENTS.TYPE = 'IMPAYE', MONTANT,0))));

Cela marche en Oracle maintenant en PHP j'ai pas testé :S
Tu fais simplement un COUNT sur ta requete non ?
 
WRInaute discret
oulala comme tu dis ;)

ta soluce marche pas, ca me donne N lignes avec le nombre de lignes pour chaque personne...

utiliser COUNT(DISTINCT(REGLEMENTS.PERSONNE)) est deja mieux : ca me fait N lignes avec '1' a chaque fois, mais je n'arrive pas à récuperer ce nombre de lignes en SQL directement... ce que je veux récuperer, c'est ce N simplement (1 ligne avec marqué N dedans...)

thanx anyway....

bug MySQL ou dans ma ptite tete ???
 
WRInaute discret
Rajoute un peu le FROM dans ma requète

Si ton résultats est correct et que tu veux simplement le nombre de ligne, un SELECT COUNT(...) FROM devrait te donner le bon résultats.

http://dev.mysql.com/doc/refman/5.0/fr/views.html
Apparement on peux créer des vues sous mysql :O
J'en apprend tous les jours

Créé donc un vue
Avec ta première requète
Et tu fais un Select sur ta vue

Code:
SELECT COUNT(*) FROM TAVUE;

Cela dis il y à certainement moyen de faire autrement ^^
 
WRInaute discret
ok, merci, mais comme précisé plus haut, ca doit tourner imperativement sous mysql 4.1...

si seulement je pouvais upgrader...
 
WRInaute discret
Code:
SELECT COUNT(*)
FROM reglements
WHERE id IN ( 
   SELECT id 
   FROM reglements
   GROUP BY personne having (SUM(IF(REGLEMENTS.TYPE = 'REGLEMENT', MONTANT,0))<SUM(IF(REGLEMENTS.TYPE = 'IMPAYE', MONTANT,0))))
 
WRInaute discret
wow

i thing you're the boss !!

tu as gagné une sacré biere !

i'm impressed ;))

tu as un outil pour faire des requetes ou c'est 'mental' ?

thanx a lot

je vais tenter d'integrer cela...
 
WRInaute discret
Bravo...

c'est intégré et ca marche a merveille sur ma MySQL 4.1...

les gars si vous avez un prob sur SQL, demandez à Baronz...

pouf...

quand tu veux pour la bière mais je pense que tu as ce qu'il faut chez toi ;))
 
Discussions similaires
Haut