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 :
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
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]