IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Valeur max par ligne


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    test
    Inscrit en
    Mai 2016
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : test
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2016
    Messages : 343
    Points : 121
    Points
    121
    Par défaut Valeur max par ligne
    Bonsoir à toutes et a tous
    Je cherche une méthode pour récupérer la valeur max par produit. J'ai essayé d’utiliser la fonction merge mais je n'ai pas trouvé une solution efficace
    Je dois sélectionner la valeur maximale par ligne
    Le script de la table est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create table value_test
    (type_produit varchar(30),
    value1 int ,
    value2 int ,
    value3 int ,
    value4 int
    )
    Je dois avoir ce résultat (voir imprime écran)
    merci pour votre aide
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Quelque chose comme cela peut-être ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT type_produit, MAX(v) FROM (
    SELECT type_produit, value1 AS v FROM value_test
    UNION
    SELECT type_produit, value2 AS v FROM value_test
    UNION
    SELECT type_produit, value3 AS v FROM value_test
    UNION
    SELECT type_produit, value4 AS v FROM value_test
    ) AS D GROUP BY D.type_produit;
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Votre base est mal modélisée. Vous violez la première forme normale par apocope... SI elle était bien normalisée, la requête serait simple à établir et surtout d'une redoutable efficacité. Parce que avec ce modèle, quelque soit les solution, ce sera toujours catastrophique pour les performances...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Votre base est mal modélisée. Vous violez la première forme normale par apocope... SI elle était bien normalisée, la requête serait simple à établir et surtout d'une redoutable efficacité. Parce que avec ce modèle, quelque soit les solution, ce sera toujours catastrophique pour les performances...

    A +
    Pas forcément, peut être qu'ici il ne s'agit pas de 5 occurrences d'un même attribut - auquel cas il y a effectivement grave erreur de modélisation - mais 5 attributs différents dont les noms de colonne sont ici banalisés pour simplifier le propos.

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    une alternative à la solution de Dorinf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT 
    		type_produit
    	,	(SELECT MAX(x) FROM (VALUES(value1), (value2), (value3), (value4)) T(x))
    FROM value_test

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Quel est votre SGBD ?
    La plupart supportent la fonction GREATEST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      select type_produit
           , greatest(value1, value2, value3, value4) as greatest_value
        from value_test
    order by type_produit asc;

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    La plupart, je ne sais pas. SQL Server ne le fait pas en tout cas...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Quel est votre SGBD ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      select type_produit
           , greatest(value1, value2, value3, value4) as greatest_value
        from value_test
    order by type_produit asc;
    Quel est votre SGBD (bis) certains acceptent la syntaxe suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MAX (col1, col2, ..., coln)            
    FROM ma_table

Discussions similaires

  1. nombre de valeurs variable par ligne d'un fichier texte
    Par Christinita dans le forum MATLAB
    Réponses: 3
    Dernier message: 15/02/2012, 22h05
  2. [XL-2010] Valeur max par date
    Par calagan99 dans le forum Excel
    Réponses: 2
    Dernier message: 30/11/2011, 14h08
  3. Compter le nombre de valeurs identiques par ligne d'une table
    Par patriciaprovence dans le forum Requêtes
    Réponses: 8
    Dernier message: 06/12/2010, 09h26
  4. Réponses: 2
    Dernier message: 01/12/2006, 10h09
  5. Valeur Max d'un champ par défaut
    Par popoliline dans le forum Access
    Réponses: 2
    Dernier message: 01/09/2006, 18h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo