|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre du Club
![]() Inscription : juin 2003 Messages : 83 ![]() |
Bonsoir,
j'ai un problème qui va finir par avoir ma peau J'ai découvert hier l'UNION ALL. Parfait. Je l'applique avec succès dans un certain nombre de cas simples mais pas dans le suivant. Explication. Je souhaite connaitre les points marqués et concédés par les équipes d'une conférence (sport US) durant les finales. J'ai donc une table match avec pour le score final deux champs : scoredom et scoreext (comme domicile et extérieur). La désignation du "dom ext" entre les conférences se fait en alternant une année sur 2. La conférence A joue les finales à domicile pour les finales 1 3 5 .... La conférence B joue les finales à domicile pour les finales 2 4 6 .... Je commence par vouloir les points marqués et concédés par les équipes de la conférence A durant les finales (idFinale : 1 par édition). Donc une année sur deux, les points pour seront dans scoredom et une année sur deux dans scoreext. Req 1: Points marqués PP et concédés PC cas des matchs à "domicile" Code :
Code :
Je tente donc une UNION ALL en me disant qu'en sommant les PP et les PC, j'aurais mon total correct. Code :
![]() Les PP-PC des deux requêtes ne s'additionnent pas correctement. En fait, le résultat est l'addition des scoredom et des scoreext sans tenir compte des ALIAS PP et PC. C'est comme si j'avais fait : SELECT SUM(scoredom), SUM(scoreext) FROM finale Donc soit il me manque quelque chose. Soit la SUM dans un UNION ALL fonctionne mal, est mal "propagée" au SELECT qui l'utilise. Merci pour votre aide, Cordialement |
||||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 951 ![]() |
je suis vraiment étonné que tu n'aies pas d'erreur de syntaxe dans ta derniere requete, union et mysql...
bon sinon Code :
edit: pour UNION ce qui compte c'est la position des colonnes, pas leur appellation.
__________________
PHP fait nativement la validation d'adresse électronique Utilisez le bouton résolu! |
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 951 ![]() |
qu'on ne se méprenne pas ce que tu appelles participant c'est le nombre de match. en cas de poule unique et tous les matchs joués, on peut déduire facilement le nombre de joueurs différents du nombre de matchs joués à l'aide de l'inverse de la suite géométrique qui va bien, mais c'est quand même plus facile de faire une requête séparée.
__________________
PHP fait nativement la validation d'adresse électronique Utilisez le bouton résolu! |
|
|
00
|
|
|
#4 | |||||
|
Membre du Club
![]() Inscription : juin 2003 Messages : 83 ![]() |
Citation:
![]() Ton edit a donné la solution. C'est hallucinant ce truc. J'ai vraiment cherché des heures mais je n'ai pas trouvé cette règle. C'est quand même un peu tordu. Tu donnes un nom (PP ou PC) et il est ignoré. J'ai donc juste interverti les champs et là ça fonctionne ! Moralité : Code :
La requête ci-dessus a peut être une petite erreur de syntaxe car j'ai simplifié pour le forum mais encore, en regardant, je ne vois pas. Aurais-tu un site exhaustif sur les finesses (My)SQL ? Je trouve la donc officielle pauvre en exemple. Encore merci de m'avoir sorti de cette impasse |
|||||
|
|
00
|
|
|
#5 |
![]() ![]() |
En fait quand tu fais une UNION de deux requêtes, c'est l'alias de la première requête qui compte pour nommer les colonnes de résultat. Les alias de la ou des autres requêtes unies n'ont aucune importance. Il convient donc en effet de bien faire attention à l'ordre des colonnes.
Et je ne pense pas que ce soit spécifique à MySQL.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#6 | ||
|
Membre du Club
![]() Inscription : juin 2003 Messages : 83 ![]() |
C'est ce que mes tests m'ont fait comprendre et c'est effectivement surement général à SQL.
Je viens au passage de découvrir la création de variable dans le SELECT. En effet, vu que mes conférences sont déterminées par le Modulo, lorsque je veux joindre les deux Unions (là je n'ai parlé que de la CONF1 mais il y a l'autre), il me faut un "champ" pour faire mon group by. Donc j'ai fait dans la 1ère UNION : Code :
SELECT SUM( Participant ) AS participantSum, SUM(PP), SUM(PC), @CONF:="CONF1" AS CONF Code :
SELECT SUM( Participant ) AS participantSum, SUM(PP), SUM(PC), @CONF:="CONF2" AS CONF Code :
merci pour votre aide (je passe en résolu). Bonne journée |
||
|
|
00
|
|
|
#7 |
![]() ![]() |
Tu n'as même pas besoin de variable !
Tu peux directement faire ceci : Code :
SELECT SUM( Participant ) AS participantSum, SUM(PP), SUM(PC), 'CONF1' AS CONF
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#8 | |
|
Membre du Club
![]() Inscription : juin 2003 Messages : 83 ![]() |
Citation:
Merci beaucoup (j'ai quand même appris qu'on pouvait jouer avec des variables |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com