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

Développement SQL Server Discussion :

Fonction SQL - Les 10 meilleurs Valeurs


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut Fonction SQL - Les 10 meilleurs Valeurs
    Bonjour,

    J'ai une Table qui contient la liste des cotisations des clients , je cherche à obtenir les 10 meilleurs montant de cotisation pour l'un des clients .
    Quelle est le fonction qui me permet d'avoir ce résultats ???
    Merci.

    voila la structure de ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE [dbo].[cotisation ](
    	[num_pens] [char](10) NOT NULL,
    	[ann_cotisation] [int] NOT NULL,
    	[mt_cotisation] [money] NOT NULL,
     CONSTRAINT [PK_cotisation ] PRIMARY KEY CLUSTERED 
    (
    	[num_pens] ASC,
    	[ann_cotisation] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    quel est votre sgbd ?

  3. #3
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Avec une auto jointure, un count, et un having, vous devriez pouvoir vous en sortir.

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et quelle est la structure de la table.

    Bref, respectez les règles de ce forum.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bonjour,

    quel est votre sgbd ?
    je travaille avec Sql server 2008

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et quelle est la structure de la table.

    Bref, respectez les règles de ce forum.
    je viens d’insérer la structure de ma table , désolé

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Yanika_bzh Voir le message
    Avec une auto jointure, un count, et un having, vous devriez pouvoir vous en sortir.

    Bon courage
    je viens de poster la structure de ma table , donnez moi la requête svp.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    qu'avez vous essayé ?

    edit : si vous n'avez besoin que des X premières valeurs pour un client alors la fonction TOP pourra être utilisée.

    Si vous avez besoin de ces valeurs pour n clients différents il faudra regardé du côté des fonction de fenêtrage avec row_number() ou rank() ou ...

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par punkoff Voir le message
    qu'avez vous essayé ?

    edit : si vous n'avez besoin que des X premières valeurs pour un client alors la fonction TOP pourra être utilisée.

    Si vous avez besoin de ces valeurs pour n clients différents il faudra regardé du côté des fonction de fenêtrage avec row_number() ou rank() ou ...
    Non j'ai besoin des X meilleurs valeurs pour un clients ( Les 10 MAX valeurs cotisé )

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Euh... quelle est la différence entre ce morceau de phrase :
    Citation Envoyé par punkoff
    X premières valeurs pour un client
    et celui-ci :
    Citation Envoyé par zayoub
    X meilleurs valeurs pour un clients
    À la faute d'orthographe près, et à "premières" au lieu de "meilleures", j'ai un peu l'impression que c'est pareil !

    Veux-tu dire qu'en fait tu veux les dix clients ayant le plus cotisé ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Euh... quelle est la différence entre ce morceau de phrase :

    et celui-ci :

    À la faute d'orthographe près, et à "premières" au lieu de "meilleures", j'ai un peu l'impression que c'est pareil !

    Veux-tu dire qu'en fait tu veux les dix clients ayant le plus cotisé ?
    c bon j'ai réussie à obtenir les 10 meilleurs montants cotisé d'un client avec cette requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select TOP 10 mt_cotisation as best_10
    from [cotisation ]
    where num_pens = '0000000001'
    order by mt_cotisation DESC
    j'ai le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
         best_10
         --------
    1   12345,09
    2   2335,989
    .
    .
    .
    10  3465,88
    comme vous pouvez le voir, j'ai utiliser la fonction TOP avec un ORDER BY et ça marche très bien, maintenant je veux la moyenne des resultats retourné par cette requette , comment faire ??
    Merci pour votre patience

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    En faisant comme tu l'indiques :

    en faisant la moyenne des valeurs fournies par la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT AVG(test_10)
    FROM ("la requête")
    Merci d'ajouter un sur les tags qui vous ont aidé

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    En faisant comme tu l'indiques :

    en faisant la moyenne des valeurs fournies par la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT AVG(test_10)
    FROM ("la requête")
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select AVG(best_10)
    from( select TOP 10 mt_cotisation as best_10 
    	  from [cotisation ]
    	  where num_pens = '1999123456'
    	  order by mt_cotisation desc)
    j'obtiens l'erreur : Msg*102, Niveau*15, État*1, Ligne*5 Syntaxe incorrecte vers ')'.
    je vois absolument pas d’où ça vient !!!!

  14. #14
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    il faut nommer la sous-requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT AVG(best_10)
    FROM (SELECT TOP 10 mt_cotisation AS best_10 
    	  FROM [cotisation ]
    	  WHERE num_pens = '1999123456'
    	  ORDER BY mt_cotisation DESC) AS SELECTION
    Voir les FAQ et petits papier de SQLPro
    Merci d'ajouter un sur les tags qui vous ont aidé

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    il faut nommer la sous-requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT AVG(best_10)
    FROM (SELECT TOP 10 mt_cotisation AS best_10 
    	  FROM [cotisation ]
    	  WHERE num_pens = '1999123456'
    	  ORDER BY mt_cotisation DESC) AS SELECTION
    Voir les FAQ et petits papier de SQLPro
    Merci Infiniment !!! ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/11/2007, 09h56
  2. [SQL] Les valeurs changent
    Par LP-mpascolo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/05/2007, 11h19
  3. Fonction SQL Pour valeur nulle
    Par claralavraie dans le forum Oracle
    Réponses: 5
    Dernier message: 04/10/2006, 13h39
  4. [SQL] php et recuperation d'une valeur renvoyée par une fonction sql
    Par highman dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/06/2006, 15h42

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