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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Résumer plusieurs lignes en une seule

 

Sujet(s) à lire :
 

Quel est le meilleur forum MySQL?




Attention si vous cliquez sur "voir les résultats" vous ne pourrez plus voter

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Résumer plusieurs lignes en une seule

n°2229770
maestro130​3
Posté le 02-06-2014 à 16:30:03  profilanswer
 

Bonjour,
 
 J'ai une table qui contient 4 champs ;
 index
 p1
 p2
 p3
 
 Mon objectif est de regrouper au mieux pour avoir l'information avec le moins de lignes possibles.
 
 Voici un exemple

Code :
  1. 1201 0,802 0,05 0,07
  2. 1202 0,802 0,05 0,07
  3. 1203 0,802 0,05 0,07
  4. 1204 0,052 0,035 0,076
  5. 1205 0,802 0,05 0,07
  6. 1206 0,802 0,05 0,07
  7. 1207 0,802 0,05 0,07
  8. 1208 0,802 0,05 0,07
  9. 1209 0,802 0,05 0,07
  10. 1224 0,802 0,05 0,07
  11. 1225 0,802 0,05 0,07
  12. 1226 0,052 0,035 0,076
  13. 1228 0,802 0,05 0,07
  14. 1229 0,802 0,05 0,07
  15. 1231 0,802 0,05 0,07
  16. 1234 0,802 0,05 0,07
  17. 1236 0,052 1 0,076
  18. 1239 0,802 0,05 0,07
  19. 1240 0,802 0,05 0,07
  20. 1242 0,9653 0,398 0,66
  21. 1246 0,823729 0,8495 0,885
  22. 1248 0,802 0,05 0,07
  23. 1249 0,052 0,035 0,076
  24. 1250 0,052 0,035 0,076
  25. 1251 0,802 0,05 0,07
  26. 1252 0,802 0,05 0,07
  27. 1253 0,802 0,05 0,07
  28. 1254 0,802 0,05 0,07
  29. 1256 0,802 0,05 0,07


 
La série 120 serait donc remplacée par les 2 lignes suivantes:
120 0,802 0,05 0,07
1204 0,052 0,035 0,076
La série 122 serait donc remplacée par les 2 lignes suivantes:
122 0,802 0,05 0,07
1226 0,052 0,035 0,076
 
 
La série 123 serait donc remplacée par les 2 lignes suivantes:
123 0,802 0,05 0,07
1236 0,052 1 0,076
 
Mais la série 124 serait donc remplacée par les 4 lignes suivantes:
124 0,802 0,05 0,07
1242 0,9653 0,398 0,66
1246 0,823729 0,8495 0,885
1249 0,052 0,035 0,076
On n'y gagne qu'une seule ligne qu'on résume, les autres lignes sont laissées avec leurs détails!
 
 
 La série 125 serait donc remplacée par les 2 lignes suivantes:
1250 0,052 0,035 0,076
125 0,802 0,05 0,07
 
Cet exemple résume la philosophie des regroupements que je dois faire.
 
 Merci d'avance.

mood
Publicité
Posté le 02-06-2014 à 16:30:03  profilanswer
 

n°2229774
dreameddea​th
Posté le 02-06-2014 à 17:34:48  profilanswer
 

Je pars de l'hypothèse que ta table a la structure suivante :
- id
- col1
- col2
- col3

 

et que la série est id/10 arrondi à l'unité.

 

En jouant avec une requête imbriqué (pour le calcul des valeurs/group by) plus un case/when pour le formattage corresponds au besoin

 

Je pense qu'une requête de type

Code :
  1. SELECT
  2.      CASE
  3.           WHEN nb >1 THEN serie
  4.            ELSE min_id
  5.      END AS ref_num,
  6.      col1, col2, col3
  7. FROM (
  8.       SELECT min( id ) AS min_id, count( id ) nb, round( id /10, 0 ) AS serie, col1, col2, col3
  9.      FROM test
  10.      GROUP BY serie, col1, col2, col3
  11. ) t1
 

doit faire l'affaire non ?


Message édité par dreameddeath le 02-06-2014 à 17:39:01
n°2229828
maestro130​3
Posté le 03-06-2014 à 02:01:06  profilanswer
 

Bonjour dreameddeath,
 
Avant tout je te remercie de cette réponse rapide mais surtout de la requête qui s'est exécutée sans erreur du premier coup.
 
Mais je constate qu'elle me donne le même nombre  de lignes que dans la table test initial . Comme si les group by n'a pas fonctionné.
Pour rappel
Après le group by on voudrait que les lignes multiple soient supprimées et ne laisser que les lignes ne se répètant pas.
 
Merci infiniment

n°2229829
maestro130​3
Posté le 03-06-2014 à 02:04:21  profilanswer
 

n°2229837
dreameddea​th
Posté le 03-06-2014 à 08:08:44  profilanswer
 

Si le group by n'a pas fonctionné, c'est que les décimaux ne sont pas "égaux", certainement lié à un pb d'arrondi...
 
Tu tires d'où tes données ?

n°2229865
rufo
Pas me confondre avec Lycos!
Posté le 03-06-2014 à 13:54:17  profilanswer
 

J'aurais dit de faire un distinct ou plus rapide, un group by, aussi :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2229871
dreameddea​th
Posté le 03-06-2014 à 14:26:21  profilanswer
 

C'est pas tout à fait un distinct, car visiblement il faut faire un "rapprochement" par série (sans le dernier digit de la colonne index).
 
D'où mon group by "serie", que j'ai testé chez moi "bêtement" (jeu de donnée simulé à la mimine) et ça marche.
 
Donc je ne vois que peu d'explications :
- le moteur de base de donnée
- la structure de la table (le type des colonne)
- le jeu de donnée (par exemple un décimal tronqué à l'affichage mais qui en base est plus "précis" )
 
@maestro1303 :
- pourrais-tu me dire quelle est ton SGBD
- la structure de BDD (y compris la précision des colonnes numériques)
 
Merci d'avance


Message édité par dreameddeath le 03-06-2014 à 14:26:43
n°2230066
gpl73
Posté le 06-06-2014 à 10:45:29  profilanswer
 

select distinct(p1,p2,p3) from ma table
ou
select p1,p2,p3 from ma table group by
p1,p2,p3
la seconde solution plus rapide mais se prête pour aussi faire un count, un min, max... pour connaitre les cardinalités de tes "doublons"...


Message édité par gpl73 le 06-06-2014 à 11:15:26

---------------
mieux vaut être un con au chaud, qu'un con gelé lol

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Résumer plusieurs lignes en une seule

 

Sujets relatifs
Ouvrir plusieurs fichiers en vbaQuelle base pour 100 millions de lignes par jour
SQL et les Update multi lignesFaire tourner un Gif une seule fois.
placer image sur panel depuis menu, plusieurs images, non !!!Rapatrier les infos de plusieurs fichiers dans un classeur excel
supprimer des lignes contenant une valeur donnéeUtiliser plusieurs libs graphiques : ne pas perdre de performances
Userform avec plusieurs utilisateursimage en surbrillance par plusieurs boutons meme page
Plus de sujets relatifs à : Résumer plusieurs lignes en une seule


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