question SQL - Programmation
Marsh Posté le 09-01-2002 à 23:56:19
défini un peu mieux ce qu'est le temps de connecion maxi
Marsh Posté le 09-01-2002 à 23:56:48
comprends pas ce que tu veux faire  
 
 
(le deuxième HAVING est plus que louche pour moi en tout cas) 
[edtdd]--Message édité par joce--[/edtdd]
Marsh Posté le 09-01-2002 à 23:59:01
et bien je veux lister tous les logins avec le temps de connexion qui est le plus grand 
 
merci de participer  
 
 
PS : pas sympa le move.... 
Marsh Posté le 09-01-2002 à 23:59:49
et 
 
SELECT login from connexions group by login ORDER BY duree DESC LIMIT 0,50 
 
? 
(ou time à la place de duree) 
Marsh Posté le 10-01-2002 à 00:02:14
non car malheureusement je ne dois sortir que les login de temps de connexion le plus grand 
 
c'est un sale exo theorique, bien sur en pratique ce serait plus tranquille   
 
 
et de plus je dois sommer les temps de connexion, la table connexion n'est qu'un log 
[edtdd]--Message édité par sisicaivrai--[/edtdd]
Marsh Posté le 10-01-2002 à 00:02:35
dans ce cas, il y a plus simple : 
Select Login, Max(Time) 
From Connexion 
group by Login 
Marsh Posté le 10-01-2002 à 00:03:37
| bardass a écrit a écrit  : dans ce cas, il y a plus simple : Select Login, Max(Time) From Connexion group by Login | 
 
je dois sommer 
le temps total de connexion n'est pas donné 
[edtdd]--Message édité par sisicaivrai--[/edtdd]
Marsh Posté le 10-01-2002 à 00:05:21
la table connexion contient les logs du genre : login, date, heure, duree de connexion
Marsh Posté le 10-01-2002 à 00:06:31
au dodo 
ce sera pour demain 
  
 
Marsh Posté le 10-01-2002 à 06:09:51
salut à tous... 
De retour pour un petit passage seulement...  
 
 
déjà, un group by sur une donnée lorsqu'on ne retourne que cette donnée... ben... fo pas faire car inutile...  
 
 
le truc de bardass me semble correcte... 
 
Si tu dois sommer les durees pas login... alors ou est le maximum ? 
Pige pas trop ton pb.  
 
Marsh Posté le 10-01-2002 à 10:06:09
| sisicaivrai a écrit a écrit  : la table connexion contient les logs du genre : login, date, heure, duree de connexion | 
 
il est là mon probleme :  
je dois d'abord pour chaque login sommer son temps total de connexion, et puis afficher le ou les logins dont le temps de connexion est le plus grand 
et uniquement celui là (ceux la), pas question de faire un order by et de prendre que le 1er  
 
[edtdd]--Message édité par sisicaivrai--[/edtdd]
Marsh Posté le 10-01-2002 à 10:55:10
SELECT login, sum(duree) FROM connexions 
  GROUP BY login 
  HAVING max(duree) = (SELECT max(duree) from connexions) 
 
Avec ça tu obtiendras un truc de ce genre : 
 
LOGIN        SUM(DUREE) 
-----        ---------- 
AZERT        15206 
YUIOP        2630 
QSDFG        98563 
 
où AZERT, YUIOP et QSDFG ont, parmi leur différentes durées de connexions, une durée égale à la durée de connexion maximale... 
C'est ça que tu voulais ? 
(j'ai testé cette requête sur Oracle, ça marche) 
[edtdd]--Message édité par irulan--[/edtdd]
Marsh Posté le 10-01-2002 à 10:58:40
pas tout a fait irulan  , ce que je voudrais :
 , ce que je voudrais :   
| Code : 
 | 
 
  
 
 
il doit manquer un truc a droite : 
SELECT login from connexions HAVING sum(duree)= (SELECT sum(duree),login AS time from connexions GROUP BY login HAVING MAX(time)) 
non, ca va pas a cause du sum(duree)=select multiple  
 
on peut faire un max(sum(duree)) ? 
  
 
[edtdd]--Message édité par sisicaivrai--[/edtdd]
Marsh Posté le 10-01-2002 à 13:11:33
SELECT Login,Max(Durée)  
FROM Connexions,Abonnements  
WHERE Max(Durée) IN  
(SELECT Login,Sum(Durée)  
FROM Connexions  
GROUP BY Login)  
 
? 
Marsh Posté le 10-01-2002 à 16:23:20
Je ne pense pas que tu puisses faire ça en une seule requête SQL : un MAX(SUM(DUREE)) n'est pas possible. 
 
Autre chose, quand tu utilises MAX(duree), ça ne te sort que la valeur MAXIMALE présente dans la colonne duree, en aucune façon ça ne représente la somme des durées. 
 
Donc dans tous les cas => blocked ! 
Marsh Posté le 10-01-2002 à 16:30:35
en fait cette question fait partie de l'examen de l'an passé du cours que j'ai demain  
 
 
il y a un corrigé avec, mais il semble complètement faux  
 
 
leur réponse :  
| Code : 
 | 
 
notez le group by inutile, que j'avais repris dans ma solution du coup... 
 
ils ont du mal exprimer ce qu'ils voulaient, car ici il semble prendre comme duree total sommée =max des durees partielles 
Marsh Posté le 10-01-2002 à 16:39:20
| irulan a écrit a écrit  : Je ne pense pas que tu puisses faire ça en une seule requête SQL : un MAX(SUM(DUREE)) n'est pas possible. | 
 
 
Sur Oracle 7 et + les requêtes d'agrégation imbriquées sont possibles alors que ce n'est pas encore le cas avec PostgreSQL (  )
 ) 
 
On peut très bien faire SELECT AVG(MAX(SALAIRE)) FROM EMP; et faire aussi SELECT MAX(AVG(SALAIRE)) FROM EMP; 
[edtdd]--Message édité par AlphaT--[/edtdd]
Marsh Posté le 10-01-2002 à 16:43:26
| AlphaT a écrit a écrit  : Sur Oracle 7 et + les requêtes d'agrégation imbriquées sont possibles alors que ce n'est pas encore le cas avec PostgreSQL (  ) On peut très bien faire SELECT AVG(MAX(SALAIRE)) FROM EMP; et faire aussi SELECT MAX(AVG(SALAIRE)) FROM EMP; | 
 
et ici faire un max(sum(duree)) donnerait ce que je cherche? 
Marsh Posté le 10-01-2002 à 18:21:29
essaye d'inverser le problème. 
 
calcul le temps max de connexion et recupère les logins correspondants. 
 
 
essaye: 
select max(sum(t1.duree)),distinct t1.login from table t1, table t2 
where t1.login = t2.login 
group by t1.login 
 
 
 
mais sinon, en une seule requete, c'est pas évident 
Marsh Posté le 10-01-2002 à 18:27:38
| jupiler a écrit a écrit  : essaye d'inverser le problème. calcul le temps max de connexion et recupère les logins correspondants. essaye: select max(sum(t1.duree)),distinct t1.login from table t1, table t2 where t1.login = t2.login group by t1.login mais sinon, en une seule requete, c'est pas évident | 
 
je suis d'accord sur le principe, mais je ne vois pas bien ce que tu fais  
 
Marsh Posté le 10-01-2002 à 18:33:28
| sisicaivrai a écrit a écrit  : en fait cette question fait partie de l'examen de l'an passé du cours que j'ai demain   il y a un corrigé avec, mais il semble complètement faux   leur réponse : 
   | 
 
 
leur réponse est tout a fait correcte, je vois pas ce qui te dérange dedans. Pour info, le group by fait office de sum... 
Marsh Posté le 10-01-2002 à 18:36:19
| gizmo a écrit a écrit  : leur réponse est tout a fait correcte, je vois pas ce qui te dérange dedans. Pour info, le group by fait office de sum... | 
 
comment ca ils somment avec group by?   
 
 
select Login 
 from Connexions 
group by Login c utile, ca? 
having Sum(Durée) = (select Max(Durée) 
                      from Connexions 
                     group by Login); 
[edtdd]--Message édité par sisicaivrai--[/edtdd]
Marsh Posté le 10-01-2002 à 18:38:08
ben oui c'est utile! tout comme le second, ils ont le même rôle...
Marsh Posté le 10-01-2002 à 18:38:55
| gizmo a écrit a écrit  : ben oui c'est utile! tout comme le second, ils ont le même rôle... | 
 
explique moi stp, je ne vois pas  
 
Marsh Posté le 10-01-2002 à 23:03:28
nope, oublie, j'ai dis une connerie, c'est pas généralisé du tout comme fonction du group by 
 
Une solution correct, c'est effectivement celle d'alphaT, a savoir  
| Code : 
 | 
 
 
mais il faut que la db que tu utilises accepte les agrégations imbriquées, ce qui n'est pas la cas de mysql ni access. 
 
Mais il faut voir ce que ton prof veux. Tiens au fait, ton prof, c'est pas Zimany, par hasard? 
Marsh Posté le 10-01-2002 à 23:04:13
| gizmo a écrit a écrit  : nope, oublie, j'ai dis une connerie, c'est pas généralisé du tout comme fonction du group by Une solution correct, c'est effectivement celle d'alphaT, a savoir 
   | 
 
si   
 
 
ESTEBAN PAS POWAZAAA  
  
 
et Minou l'assistant... 
[edtdd]--Message édité par sisicaivrai--[/edtdd]
Marsh Posté le 10-01-2002 à 23:33:27
info ou polytech? 
 
Bah, si c'est ca, te bile pas, je me suis tapé un 15 sans avoir ouvert le cours. Minou a même filé des réponses à des copains pendant l'exam (sans s'en rendre compte, le con  ).
). 
 
Tiens, au fait, votre travail, l'enoncé était correct? linguistiquement parlant? Je me suis enguelé avec lui l'année passée parce que c'est phrases auraient fait se retourner bécherelle dans sa tombe... 
Marsh Posté le 10-01-2002 à 23:36:29
info, mais pas de différence hein  
 
bah je sais bien que c'est un exam bidon, mais ca me fait peur que ce soit minou qui corrige  
  
quand je le vois... 
 
et pis certaines requetes sont hardos 
 
 
l'énoncé http://polytech.ulb.ac.be/cours/info364/projet.pdf  
ben cai du parlai minou kwa, cai comme kan il explik au TP  
   
 
t'es en quelle année? 
vais vraiment  lé tard
 lé tard  
 
 
  
 
 
PS : tiens au fait l'exo doit te rappeler quelque chose, il est tiré de l'exam de l'an passé  
 
[edtdd]--Message édité par sisicaivrai--[/edtdd]
Marsh Posté le 10-01-2002 à 23:41:51
ben, oui, ca me disait qqch mais comme je garde pas mes anciens exam. 
Sinon chuis en 2eme license info. je vais lire ce truc a mon aise. 
Marsh Posté le 11-01-2002 à 11:05:49
| AlphaT a écrit a écrit  : Sur Oracle 7 et + les requêtes d'agrégation imbriquées sont possibles alors que ce n'est pas encore le cas avec PostgreSQL (  ) On peut très bien faire SELECT AVG(MAX(SALAIRE)) FROM EMP; et faire aussi SELECT MAX(AVG(SALAIRE)) FROM EMP; | 
 
 
Ben c'est bizarre, hier en faisant des tests pour ça justement, Oracle m'avait renvoyé un message d'erreur, me disant qu'il y avait un problème d'imbrication. Et là je viens de retester, et ça marche nickel  
 
Bon, désolé pour l'info erronée (Oracle m'a bien eu sur ce coup-là  )
 ) 
Marsh Posté le 09-01-2002 à 23:41:48
on peut faire ca ?
 
 
(le but est de connaitre tous les login de temps de connex maximum)
SELECT login from connexions HAVING sum(duree)= (SELECT sum(duree) AS time from connexions HAVING MAX(time))
edit : ok le group by était inutile
[edtdd]--Message édité par sisicaivrai--[/edtdd]