[SQL] Aggregate Function missing?

Aggregate Function missing? [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 21-07-2004 à 14:11:17    

Bonjour,
 
J'ai un petit problème de sql, j'ai trouver sur ce site  :sarcastic: :  
 
http://www.w3schools.com/sql/sql_functions.asp
 
La fonction "LAST()" , mais quand je cherche à l'utiliser, MYSQL ne la detecte pas comme une commande et donc genère une erreur, je suis aller me renseigner sur ce site :  
 
http://dev.mysql.com/doc/mysql/en/ [...] tions.html
 
Mais il n'y a pas de trace de cette fonction ....  :ouch:  :heink:  :(  
 
QQn peut me renseigner svp? :??:  
 
Merci d'avance :jap:  
 
Esox

Reply

Marsh Posté le 21-07-2004 à 14:11:17   

Reply

Marsh Posté le 21-07-2004 à 17:42:28    

up

Reply

Marsh Posté le 21-07-2004 à 17:44:06    

donne ta requête stp.
 
si tu utilise une fonction d'aggération, (count, sum, ...) tu dois faire un GROUP BY  


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-07-2004 à 17:46:32    

Donc la requette est (dsl si c un peu caotique) :  
 

Code :
  1. SELECT nom,description,groupe,COUNT(sujets.id) AS countid,LAST(reponse.auteur) AS lastauteur,LAST(reponse.cree) AS lastcree FROM forums,permissions,reponses,sujets GROUP BY forum.id HAVING forums.id != '0' && forums.id = permissions.id_forum && sujets.forum_id = forum.id && reponses.id_sujet = sujets.id && permissions.login = 'Esox'


 
Et mysql me repond :
 
#1064 - Erreur de syntaxe près de '( reponse.auteur ) AS lastauteur, LAST( reponse.cree ) AS lastcr' à la ligne 1
 
 
Merci d'avance

Reply

Marsh Posté le 21-07-2004 à 17:55:14    

bon à froid comme ça :
 
SELECT nom,description,groupe,COUNT(sujets.id) AS countid,LAST(reponse.auteur) AS lastauteur,LAST(reponse.cree) AS lastcree  
FROM forums,permissions,reponses,sujets
 
GROUP BY nom,description,groupe
WHERE forums.id != '0'  
AND forums.id = permissions.id_forum  
AND sujets.forum_id = forum.id  
AND reponses.id_sujet = sujets.id  
AND permissions.login = 'Esox'
 
 
remarque : having est l'équivalent de WHERE mais pour les fonction d'aggrégation (HAVING SUM(id) > 10)
 
utilise AND plutôt que &&


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-07-2004 à 17:57:20    

L'erreur reste la meme :(

Reply

Marsh Posté le 21-07-2004 à 17:58:48    

as 'countID'
 
rajoute les ' partout


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-07-2004 à 18:02:00    

J'avais penssé a ca, mais sur le site de w3school ils mettent pas les ', et d'ailleur si je les met l'erreur reste pareille

Reply

Marsh Posté le 21-07-2004 à 18:04:36    

ben en fait en MySQL la fonction LAST() n'existe pas.
 
le problème vient de là. essaie MAX()


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-07-2004 à 18:05:36    

Ui mais avec max je vois mal comment faire ... zut ... et pkoi dans le site de w3c ils disent que ca existe?

Reply

Marsh Posté le 21-07-2004 à 18:05:36   

Reply

Marsh Posté le 21-07-2004 à 18:18:53    

il existe plusieurs SGBD, plusieurs version du langage SQL, etc... [:spamafote]


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-07-2004 à 18:20:11    

Ok ... je m'etais dit que vu qu'ils avaient deja fait la distinction entre MS et SQL, alors tt les sgbd basé sql admettaient cette fonction ...

Reply

Marsh Posté le 22-07-2004 à 09:19:28    

Est-ce que qqn aurait une idée de comment je peux faire pour obtenir le meme resultat avec Max()? Parceque je vois pas trop... La requette en gros doit faire ça :
 
Ma table contient une colonne index et une colonne données,et une colonne données2, les colonnes données et données2 peuvent contenir plusieurs fois chaque donnée. J'aimerais que la requete m'indique la valeur de la derniere recurence de donnée quand donnée2 a une valeur précise.
Tout en sachant que les données ne sont pas classées par ordre alphabetique dans la table.
En gros ca serais qqch du genre :
 
SELECT donnée FROM matable WHERE id = MAX('id') AND donnée2 = 'madonnée'
 
Qqn vois comment on peut transformer cette requette pour qu'elle soit possible?
Merci

Reply

Marsh Posté le 22-07-2004 à 09:46:35    

une petite feinte :
 
SELECT donnée FROM matable WHERE donnée2='madonnée' ORDER BY id DESC LIMIT 1

Reply

Marsh Posté le 22-07-2004 à 09:48:19    

J'y ai penssé aussi mais si plusieurs associations donnée => donnée2 existent ca marchera pas... et dans mon cas c'est justement ce qui se passe


Message édité par esox_ch le 22-07-2004 à 09:48:31
Reply

Marsh Posté le 22-07-2004 à 09:53:04    

tu moment que tu utilise une fonction d'agégation (max) tu dois utiliser group by si tu as d'autres champs.  
 
en faisant ceci, tu ne peux que perdre les infos multiple de donnée => donnée2
 
je crois que tu as mal modélisé ton truc. ou alors fais plusieurs requète (c'est mieux 2 requètes qu'une requète pourrie)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 22-07-2004 à 09:53:31    

J'ai pas trop compris la, tu peux donner un exemple ? :)

Reply

Marsh Posté le 22-07-2004 à 09:57:29    

Donc c impossible de transformer ma requette initiale (celle en haut du topic) de la sorte qu'elle n'utilise pas LAST() ? Soit faut que je fasse plusieurs requettes soit que je change mes tables?

Reply

Marsh Posté le 22-07-2004 à 10:08:03    

si tu demande le LAST, MAX, ou autre, la requête ne va retourner qu'un seule ligne par champ non groupé. imaginons
 
j'ai un table client. ces clients peuvent habiter à n localités (j'ai donc une table habiter, et une table localite) 3 tables.
 
si j'ai 3 adresses, et que je demande LAST, MAX, SUM ou autre, je n'aurais plus qu'une ligne par user, et non pas 3
 
bref. le fonctions d'aggrégation peuvent t'aider, mais tu ne peux pas les utiliser à tout va


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 22-07-2004 à 10:13:17    

Oui ca je l'avais compris ;) .C'est p-e moi qui me suis mal exprimé auparavant.
 
Mais pour ce que je veux faire, ma requete serait parfaite s'il y avais pas ce LAST() a convertir en autre chose ...  et la est tout le probleme .. j'arrive pas du tout a m'imaginer par quoi je peux remplacer ce LAST() tout en ne mettant pas de LIMIT = 1 etant donné que ce select pourra retourner plusieurs données (vu que forum.id n'est pas unique)

Reply

Marsh Posté le 22-07-2004 à 11:11:44    

ben LAST çA existe pas il faudras faire avec hein [:spamafote]


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 22-07-2004 à 11:31:00    

ui je c :( , par hazard tu vois comment je pourrais tourner ma requette ?

Reply

Marsh Posté le 22-07-2004 à 11:38:12    

tu regard par rapport au champs date, ou à l'id au pire.  
 
sinon, on dit occurence, pas récurrence


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed