|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Alexandre Inscription : septembre 2011 Messages : 13 ![]() |
Bonjour,
Je suis débutant en SQL, et je travaille sur une table "maison" pour apprendre les bases. j'ai donc une table MySQL (table_chris), contenant des enregistrements, avec, pour faire simple : une colonne ID de type integer clé primaire une colonne outcome_code de type integer une colonne vendeur de type string J'ai des enregistrements du type : Id Vendeur Outcome ------------------------ 1 Toto 21 2 Tata 22 3 Tutu 51 4 Toto 22 5 Toto 51 6 Tata 22 7 Toto 22 8 Toto 21 9 Tata 21 Je souhaite calculer, pour chacun des vendeurs, le pourcentage d’occurrence de chaque outcome code. J'ai donc un premier SELECT Code :
qui me calcule bien, par vendeur, le nombre d'outcome code, qui me permettrait derrière une division du décompte de chaque outcome par ce tot_outcome. Ensuite, j'imbrique cette requête dans ma requête globale : Code :
Alors j'ai rajouté les champs dans ma sous table : Code :
Existe-t-il donc un moyen d'y arriver uniquement à partir de SELECT imbriqués, ou faut-il utiliser des choses que je ne connais pas encore (ie toute fonction différente de SELECT, ORDER, GROUP, FROM |
||||||
|
|
00
|
|
|
#2 | ||||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Peut-être en faisant une jointure sur ta sous-requête ?
Code :
Code :
|
||||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Alexandre Inscription : septembre 2011 Messages : 13 ![]() |
Merci StringBuilder !
Comme je le disais, j'essaye d'apprendre à bien faire, en prenant les concepts les uns après les autres. Je viens de regarder ce que tu me proposes, et ça fait bien ce que je souhaite faire. Par contre, peux-tu me confirmer qu'il est impossible, ou alors très mal venu de faire ce que j’attends avec uniquement des SELECT FROM et GROUP, il faut impérativement ajouter un JOIN (qui comme son nom doit l'indiquer permet de travailler avec n tables différentes, en spécifiant ce qu'il y a de commun dans les tables, ici les vendeurs) ? |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
En utilisant la clause "over partition" ça doit être faisable.
http://msdn.microsoft.com/fr-fr/library/ms189461.aspx Mais personnellement, j'ai beaucoup de mal avec cette syntaxe. Vu ton besoin, la forme "classique" ne fait rien perdre en termes de performances ou de lisibilité (ou presque). |
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Puis vu qu'il est sous MySQL, qui ne dispose pas des fonctions de fenêtrage, autant oublier tout-de-suite cette possibilité...
Quant à la dégradation des performances, tout dépend de la version de MySQL utilisée. Avant la 5.5, les perfs se dégradent très vite avec la volumétrie pour des sous-requêtes.
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Alexandre Inscription : septembre 2011 Messages : 13 ![]() |
Merci à vous deux.
Je souhaitais effectivement rester sur des fonctions classiques et communes de SQL. J'ai pas pour but de devenir un spécialiste, je souhaite juste avoir une connaissance superficielle de SQL avant de m'interesser aux cubes, à l'olap... J'utilisais MySQL car j'avais déjà une bdd SQL Server sur ma machine, et que je ne voulais pas trop faire des manip' dessus. Encore merci |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Outre les spécificités de Microsoft SQL Server que je t'invite à ignorer, je te conseille cependant de créer une nouvelle base de test sur SQL Server pour apprendre le SQL.
En effet, MySQL n'a qu'un support partiel de la norme SQL. SQL Server en supporte bien plus (les fonctions de fenêtrage en sont un exemple). Tu apprendras donc mieux à travailler en SQL avec SQL Server je pense. D'autant que si tu as SQL Server sur ton poste, j'imagine que tu vas devoir travailler avec... donc autant de faire la main dessus et découvrir ses fonctionnalités qui lui sont propre plutôt que celles de MySQL, qui pourrait ne pas te servir au final. |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Alexandre Inscription : septembre 2011 Messages : 13 ![]() |
Mon idée est de faire un mémoire, orienté Marketing, sur les outils de BI Open Source.
En fait, j'ai une bdd sql server sur mon poste qui collecte l'ensemble des calculs de simulation numérique que je fais. J'ai du mal à y accéder sur mon poste de travail car je dois utiliser un login windows... que ça ne marche pas, et ça devient impossible via Talend. Comme je ne veux pas alerter tout le monde au bureau que je fais autre chose que mon vrai métier, j'ai donc préféré utilisé MySQL avec SQL Workbench, histoire de ne pas perdre un temps fou à paramétrer. Je n'ai vraiment pas pour vocation de devenir un expert en SQL, mais vu que j'aime bien savoir de quoi je parle, je me dis que c'est mieux d'avoir des connaissances des bases, de sql, de pourquoi on utilise des cubes,... d'où mon apprentissage simultané de TOS, SQL et iReport je vais donc suivre en partie ton conseil un grand merci en tout cas pour ton aide et tes conseils. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com