[challenge] [résolu] Requete SQL galere

ZoRRo75
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 11 Mar 2004

[challenge] [résolu] Requete SQL galere

Message le Jeu Jan 05, 2006 16:50

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: Tout sélectionner
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: Tout sélectionner
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
Dernière édition par ZoRRo75 le Jeu Jan 05, 2006 18:16, édité 2 fois.


bgdc
WRInaute impliqué
WRInaute impliqué
 
Messages: 723
Inscription: 23 Mai 2005

Message le Jeu Jan 05, 2006 17:14

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: Tout sélectionner
SELECT REGLEMENTS.PERSONNE,COUNT(*)   
FROM REGLEMENTS
GROUP BY REGLEMENTS.PERSONNE;   


Bon courage.

ZoRRo75
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 11 Mar 2004

Message le Jeu Jan 05, 2006 17:16

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


Baronz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 299
Inscription: 28 Avr 2005

Message le Jeu Jan 05, 2006 17:23

Oula

Code: Tout sélectionner
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 ?

ZoRRo75
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 11 Mar 2004

Message le Jeu Jan 05, 2006 17:26

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 ???


Baronz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 299
Inscription: 28 Avr 2005

Message le Jeu Jan 05, 2006 17:45

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: Tout sélectionner
SELECT COUNT(*) FROM TAVUE;


Cela dis il y à certainement moyen de faire autrement ^^

ZoRRo75
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 11 Mar 2004

Message le Jeu Jan 05, 2006 17:50

ok, merci, mais comme précisé plus haut, ca doit tourner imperativement sous mysql 4.1...

si seulement je pouvais upgrader...


Baronz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 299
Inscription: 28 Avr 2005

Message le Jeu Jan 05, 2006 17:56

Code: Tout sélectionner
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))))

ZoRRo75
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 11 Mar 2004

Message le Jeu Jan 05, 2006 18:10

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...

ZoRRo75
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 11 Mar 2004

Message le Jeu Jan 05, 2006 18:17

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 ;))


Baronz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 299
Inscription: 28 Avr 2005

Message le Jeu Jan 05, 2006 18:45

lol c'est rien hin
Nan pas de programme dsl
J'ai des cours de SQL aucun mérite ^^

ZoRRo75
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 11 Mar 2004

Message le Jeu Jan 05, 2006 18:49

qd meme c du beau...

je pense jamais au subselect, mon cerveau est formaté pour MySQL < 4.1

THANX MAN


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités