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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SQL DISTINCT requete spéciale (POSTGRESQL)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SQL DISTINCT requete spéciale (POSTGRESQL)

n°2350984
erwan83
Du Shift DEL tu te méfieras !
Posté le 06-04-2020 à 21:04:52  profilanswer
 

Bonjour
J'ai plusieurs champs: URL, TITRE, TEXT, RACINE .....
Je voudrais pouvoir retourner un seul exemplaire de RACINE tout en retournant les autres colonnes.
Si je demande SELECT DISTINCT RACINE FROM TABLE WHERE... il me retournera toutes les racines différentes sans doublons, mais je n'ai que RACINE
Si je demande SELECT DISTINCT RACINE, URL, TITRE FROM TABLE WHERE il me retournera toutes les racines avec doublons (comme dans le premier exemple ci dessous)
 
Je voudrais donc faire mon tri et, dès que je trouve une valeur RACINE différente, j'affiche la ligne (comme dans le dernier exemple)
Au lieu de  

Code :
  1. RACINE1 URL1 TITRE1
  2. RACINE1 URL2 TITRE2
  3. RACINE1 URL3 TITRE3
  4. RACINE2 URL4 TITRE4
  5. RACINE2 URL5 TITRE5
  6. RACINE2 URL6 TITRE6


avoir juste

Code :
  1. RACINE1 URL1 TITRE1
  2. RACINE2 URL4 TITRE4



---------------
http://www.ypikay.com
mood
Publicité
Posté le 06-04-2020 à 21:04:52  profilanswer
 

n°2350994
rufo
Pas me confondre avec Lycos!
Posté le 06-04-2020 à 22:22:06  profilanswer
 

GROUP BY RACINE ?
Evite le distinct, c'est assez lent. Group by est plus rapide. Par contre, certains SGBD rigoristes par rapport à la norme interdisent de mettre dans le group by moins de champs qu'il n'y en a dans le select (on retire bien entendu les champs de type aggrégation genre MAX, count, SUM...). Mysql le tolère alors que Firebird non (si on considère que c'est un SGBD :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°2350998
erwan83
Du Shift DEL tu te méfieras !
Posté le 06-04-2020 à 22:33:36  profilanswer
 

Merci. j'ai jamais compris le group by.
Parce que là j'essaye de le caler dans tous les coins ça m'envoie bouler.
SELECT RACINE,URL,TITLE,PREUVE,POIDS FROM TABLE GROUP BY URL   ??


---------------
http://www.ypikay.com
n°2350999
erwan83
Du Shift DEL tu te méfieras !
Posté le 06-04-2020 à 22:36:48  profilanswer
 

SELECT RACINE,URL,TITLE,PREUVE,POIDS FROM _requete__goodmoon GROUP BY URL
 
Query failed: ERREUR: la colonne « _requete__goodmoon__.racine » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat


Message édité par erwan83 le 06-04-2020 à 22:37:35

---------------
http://www.ypikay.com
n°2351001
rufo
Pas me confondre avec Lycos!
Posté le 06-04-2020 à 22:41:03  profilanswer
 

SELECT RACINE,URL,TITLE,PREUVE,POIDS FROM TABLE GROUP RACINE.
 
Dans Mysql, ça passerait. Mais comme expliqué, certains SGBD à cheval sur  la norme râlent avec ce genre de requête.
Donc si ce que j'ai mis marche pas, c'est que Postgres est à cheval sur la norme.


---------------
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°2351002
erwan83
Du Shift DEL tu te méfieras !
Posté le 06-04-2020 à 22:46:27  profilanswer
 

merci je vais voir ca


---------------
http://www.ypikay.com
n°2354293
dede_sav
Posté le 23-05-2020 à 17:56:07  profilanswer
 

Ca ne va pas plaire à Postgres.
 
J'essayerais de rajouter des min/max.
 
SELECT RACINE, max(URL), max(TITLE), max(PREUVE), max(POIDS) FROM TABLE GROUP 1
 
Après si tu veux vraiment la première occurence de chaque group, il va falloir regarder du coté des rank et des partitions.
 
dd
 

n°2387304
djinto
Posté le 05-06-2021 à 21:09:30  profilanswer
 

Bonjour erwan83 ,
 
la clause DISTINCT affiche chaque champ présent dans la table.
ex :
un champ a la même valeur 25 fois. ( un nom de famille par exemple )
la requête va te renvoyer 25 lignes.
 
 
Pour l'usage de "GROUP BY", c'est un impératif dès que tu utilises max( ) , min( ) , etc .... ou les alias pour renommer une colonne.
 
c'est le moteur SQL qui a besoin de ce regroupement, pour travailler sur les lignes de la colonne concernée.
C'est vraiment un comportement d'ordinateur ( bête et re-bête ).
 
Une requete SQL , c'est une instance, c'est une instruction pour le moteur SQL.
Mal écrite, c'est 'error num x000 .....'.
 
le 'group by' est attendu, comme paramètre, dès les fonctions de calculs sur colonnes. l'un sans l'autre ne marchera jamais.
 
Si tu souhaites en savoir plus :
regardes ce qu'est "l'algèbre relationnel",
c'est les 'opérations de bases' pour l'éxècution des requêtes dans les technos Db.
 
tu verra pourquoi sans le GROUP BY , les min / max / avg / alias font 'bug'.
 
 
{ MIN / MAX / AVG / ALIAS.. opérations sur colonnes  } ===> GROUP BY
 
 
Bien sur c'est sur la norme SQL , il y a quelques libertés selon les moteurs. ( ou un setup à faire ? )


---------------
Nom : Prénom : Age : Adresse : Ville : Code Postal : Num Trois Tel

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

  SQL DISTINCT requete spéciale (POSTGRESQL)

 

Sujets relatifs
Sql Server Jointure entre table sur 2 BDDEncore mes plantages bizarres (POSTGRESQL cette fois)
MYSQL : update et select en une seule requêtePREPARE PostGreSQL Ca marche... presque
Excel - intégration de données JSON via requête sur site WEB[POSTGRESQL] WTF création unique impossibe
[POSTGRESQL] Visualisation BDD TABLES etcRequête ou interface avec cumul quotidien, hebdo, etc.
[SQL][SGBD] Base sur le SGBD ?SQL: Bonnes pratiques et conventions
Plus de sujets relatifs à : SQL DISTINCT requete spéciale (POSTGRESQL)


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