[challenge] [résolu] Requete SQL galere

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

ZoRRo75
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 204
Inscription: Jeu Mar 11, 2004 11:08

[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 passionné
WRInaute passionné
 
Messages: 657
Inscription: Lun Mai 23, 2005 20:51

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 occasionnel
WRInaute occasionnel
 
Messages: 204
Inscription: Jeu Mar 11, 2004 11:08

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 impliqué
WRInaute impliqué
 
Messages: 296
Inscription: Jeu Avr 28, 2005 18:55

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 occasionnel
WRInaute occasionnel
 
Messages: 204
Inscription: Jeu Mar 11, 2004 11:08

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 impliqué
WRInaute impliqué
 
Messages: 296
Inscription: Jeu Avr 28, 2005 18:55

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 occasionnel
WRInaute occasionnel
 
Messages: 204
Inscription: Jeu Mar 11, 2004 11:08

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 impliqué
WRInaute impliqué
 
Messages: 296
Inscription: Jeu Avr 28, 2005 18:55

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 occasionnel
WRInaute occasionnel
 
Messages: 204
Inscription: Jeu Mar 11, 2004 11:08

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 occasionnel
WRInaute occasionnel
 
Messages: 204
Inscription: Jeu Mar 11, 2004 11:08

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 impliqué
WRInaute impliqué
 
Messages: 296
Inscription: Jeu Avr 28, 2005 18:55

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 occasionnel
WRInaute occasionnel
 
Messages: 204
Inscription: Jeu Mar 11, 2004 11:08

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


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

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