Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1607 connectés 

 


Dernière réponse
Sujet : question SQL
irulan

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à :p )


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
irulan

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à :p )

gizmo 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.
sisicaivrai 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 :sweat:  
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 :sarcastic:  
 
t'es en quelle année?
vais vraiment :sleep: lé tard :o
 
 :hello:
 
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]

gizmo 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 :D).
 
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...
sisicaivrai j'ai exam demain  :sweat:  
 
 
 :hello:
sisicaivrai

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  

Code :
  1. SELECT login FROM connexions
  2. GROUP BY login
  3. HAVING sum(duree)=max((sum)duree)


 
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?  




si  :sol:
 
ESTEBAN PAS POWAZAAA :sweat:  
 
et Minou l'assistant...

 

[edtdd]--Message édité par sisicaivrai--[/edtdd]

gizmo 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 :
  1. SELECT login FROM connexions
  2. GROUP BY login
  3. HAVING sum(duree)=max((sum)duree)


 
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?

sisicaivrai

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

gizmo ben oui c'est utile! tout comme le second, ils ont le même rôle...
sisicaivrai

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

gizmo

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 :  

Code :
  1. select Login
  2.   from Connexions
  3. group by Login
  4. having Sum(Durée) = (select Max(Durée)
  5.                        from Connexions
  6.                       group by Login);


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  




 
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...

sisicaivrai

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

jupiler 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
sisicaivrai

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?

AlphaT

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]

sisicaivrai 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 :
  1. select Login
  2.   from Connexions
  3. group by Login
  4. having Sum(Durée) = (select Max(Durée)
  5.                        from Connexions
  6.                       group by Login);


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

irulan 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 !
sisicaivrai SELECT Login,Max(Durée)  
FROM Connexions,Abonnements  
WHERE Max(Durée) IN  
(SELECT Login,Sum(Durée)  
FROM Connexions  
GROUP BY Login)  
 
?
sisicaivrai pas tout a fait irulan :hello: , ce que je voudrais :  

Code :
  1. table:
  2. login   date           duree
  3. x       21/10/2001      15
  4. x       22/10/2001      10
  5. y       21/10/2001       5
  6. y       23/10/2001       5
  7. z       20/10/2001       25
  8. resultat :
  9. login
  10. x
  11. z


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

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

sisicaivrai

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]

wouatouwouatou salut à tous...
De retour pour un petit passage seulement... :D
 
déjà, un group by sur une donnée lorsqu'on ne retourne que cette donnée... ben... fo pas faire car inutile... :D
 
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. :??:
sisicaivrai

bardass a écrit a écrit :

au dodo
ce sera pour demain
 :hello:  




 :hello:

bardass au dodo
ce sera pour demain
 :hello:
sisicaivrai la table connexion contient les logs du genre : login, date, heure, duree de connexion
sisicaivrai

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]

bardass dans ce cas, il y a plus simple :
Select Login, Max(Time)
From Connexion
group by Login
sisicaivrai 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  :sweat:
 
et de plus je dois sommer les temps de connexion, la table connexion n'est qu'un log

 

[edtdd]--Message édité par sisicaivrai--[/edtdd]

deweb et
 
SELECT login from connexions group by login ORDER BY duree DESC LIMIT 0,50
 
?
(ou time à la place de duree)
sisicaivrai 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....
joce 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]

bardass défini un peu mieux ce qu'est le temps de connecion maxi
sisicaivrai y a personnes a qui ca dit quelque chose...
Stligar :wahoo:
sisicaivrai j'ai meme po peur du bide :o
sisicaivrai 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]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR