|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : décembre 2005 Messages : 11 ![]() |
Bonjour,
j'ai deux tables sql: temperature(year,month,day,temperature) sick(year, month,day,nsick) Il faut que je trouve la moyenne des 'temperature' pour le mois de chaque année qui a la plus haute moyenne de 'nsick' j'ai essayé pas mal de chose, mais je n'arrive pas à séparer le mois le plus haut de chaque année... Code :
merci d'avance pour votre aide, bouket |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 643 ![]() |
bonjour, quel est votre SGBD ?
|
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : décembre 2005 Messages : 11 ![]() |
Mysql
|
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 643 ![]() |
si vous n'avez pas trop de donnée ceci devrait fonctionner...
Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Invité régulier
![]() Inscription : décembre 2005 Messages : 11 ![]() |
Merci pour la réponse,
j'ai modifié légèrement le code pour qu'il soit reconnu par mysql (il n'aimait pas notamment l'absence de "temperature a" dans la clause WHERE... et j'ai levé l’ambiguïté comme il me le demandait pour 'year' et 'month' Code :
il occulte les années suivantes... la base de données possède beaucoup d'entrées. Sur Oracle, serait-ce plus facile ? Cdlt, Adrien ps: merci |
||
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 643 ![]() |
C'est bizarre car j'ai teste avant de poster le resultat (sur postgresql ceci ddit) alors sur oracle ca sera effectivement beaucoup plus simple et performant. La cest une requete scalaire qui va tomber dans les choux si vous avez de la volumetrie.
Code :
|
||
|
|
00
|
|
|
#7 | ||||
|
Invité régulier
![]() Inscription : décembre 2005 Messages : 11 ![]() |
bonsoir,
finalement j'ai opté pour ce code même s'il se fait en plusieurs étapes : Code :
Code :
merci pour votre aide, bouket |
||||
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
La requête est fausse, le dernier GROUP BY devrait s'écrire (ce qui ne convient évidemment pas):
A lire sur le GROUP BY et Mysql Est ce que cette requête convient : Code :
|
||
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 643 ![]() |
Vous ne faites pas la relation entre la moyenne maximum de l'année en cours dans le having.
Du coup non je ne penses pas que celà convienne. |
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Oui Punkoff, j'était en train de modifier de la sous-requête pour tentative de prise en compte du "par année" (mais je ne sais pas si c'est bon) :
Code :
|
||
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : décembre 2005 Messages : 11 ![]() |
votre solution fonctionne aussi bien que la mienne...
grace au ORDER BY ... DESC, il prend les bonnes valeurs (car il prend les premieres par défaut...) en tout cas chez moi oui ! mais, c'est vrai que c'est un peu instable... pas chez vous ? |
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Je n'ai pas testé ma requête, je ne sais donc pas si elle fonctionne correctement.
Par contre comme mentionné dans le lien : 5. Eviter le problème Citation:
Peut être qu'avec simplement un MAX (et l'ORDER BY desc) MySql s'en sort mieux, mais la requête reste fausse et à tout moment elle pourra renvoyer un résultat faux. C'est une syntaxe à éviter sauf quand on sait exactement ce que l'on fait et que l'on est certain que les colonnes selectionnées non présentes dans le GROUP BY sont constantes sur le regroupement ce qui n'est pas le cas ici. |
|
|
|
00
|
|
|
#13 | ||
|
Invité régulier
![]() Inscription : décembre 2005 Messages : 11 ![]() |
je comprends ! il semblerait que mysql prennent la première valeur qui lui passe sous la main, mais sur oracle il ne fera rien si j'ai bien compris car sinon, il doit choisir au hasard;
merci pour les éclaircissements !! CODE FONCTIONNANT : Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com