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 :

Requete SUM et requete MAX


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Requete SUM et requete MAX
    Bonjours, dans le cadre d'un projet pour l'école je dois créer une base de données avec SQL Sever. Je dois aussi inclure des script de requete pour obtenir certain résultat. Jusqu'a présent tout fonctionne bien mais il y a 2 requete que je n'arrive pas à écrire.
    (J'ai une table Clients et une table Locations, le ID_Client sert de clé primaire dans la table Clients et de clé étrangère dans la table Location. Un client peut avoir plusieur location)
    La premiere requete doit me retourner certain champ de la table Clients (ça va pour ça) et le nombre total de location du client

    La deuxième doit me retourner tout le vehicule qui ne sont pas loué (j'ai une table véhicule avec le numéro de plaque comme clé primaire qui est aussi clé étrangère dans ma table Locations)

    Je crois que la première requete devrat être une SUM et la deuxième une MAX mais j'ai de la difficulté a les écrires. Mes 2 livres SQL Server de 400 pages chaque semblent complet mais vraiment pas facile a comprendre. Un peu d'aide d'un pro du domaine serait grandement apprécié.
    Merci

    David.

  2. #2
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Bonjour,

    a priori vous aurez plus besoin d'un livre sur le langage SQL. Vous pouvez commencer à regarder dans la rubrique SGBD/Livres pour vous faire une idée. Je ne peux que vous conseiller le plus récent de la liste (une nouvelle version est d'ailleurs disponible).

    L'aide que vous pourrez recevoir n'en sera que plus efficace (pour vous) si vous avez déjà creusé le problème de votre côté... Quelles requêtes avez-vous essayé jusqu'à présent?

  3. #3
    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
    Citation Envoyé par DavidLarochelle Voir le message
    j'ai une table véhicule avec le numéro de plaque comme clé primaire
    ça c'est une très mauvaise idée !
    d'abord, car votre clef primaire est alors un [var]char(x) : cela va nuire aux performances lors des jointure, et alourdir les index inutilement.
    Ensuite car une clef primaire ne devrait jamais être porteuse d'une quelconque signification dans votre modèle, même si la signification en question assure l'unicité. ansi, un numéro de téléphone, un numéro de sécu ou un numéro d'immatriculation sont de mauvais candidats pour être la clef primaire.

    Donc ajoutez une clef primaire numérique (INT) autoincrémentée, et ajoutez simplement une contrainte d'unicité à votre colonne représentant le numéro d'immatriculation.
    Un peu de lecture à ce sujet

    Citation Envoyé par DavidLarochelle Voir le message
    Je crois que la première requete devrat être une SUM et la deuxième une MAX mais j'ai de la difficulté a les écrires. Mes 2 livres SQL Server de 400 pages chaque semblent complet mais vraiment pas facile a comprendre. Un peu d'aide d'un pro du domaine serait grandement apprécié.
    Merci

    David.
    Quelles requêtes avez vous déjà écrites et quels problèmes avez-vous rencontré ?

    Pour la première, un COUNT devrait vous suffire, pour la deuxième, un NOT EXISTS sera probablement la façon la plus simple et intuitive d'écrire la requête

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour le conseil sur la clé primaire, je vais y remédier.

    Le problème est c'est que j'ai de la difficulé à comprendre la syntaxe de ces deux requètes.
    exemple : requete 1 : je dois avoir une colone pour : info1(de la tableA), info2(de la tableA), info3(total du nombre de fois que la clé primaire d'un enregistrement de la tableA ce retrouve dans la tableB)

    requete 2 : chaque enregistrement de la tableE que la cle primaire ne se retrouve pas dans la tableF

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    J'ai finalement trouvé (j'avais oublié de poster ma solution la semaine dernière)

    Pour la première j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Nom, Prenom, Telephone, COUNT (*) Nombre_de_Locations FROM Clients
    INNER JOIN Locations ON ID_Client = Client
    GROUP BY Nom, Prenom, Telephone
    Et la deuxième j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Vehicules WHERE NIV_Vehicule NOT IN (SELECT NIV_Vehicule FROM Locations)

  6. #6
    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
    La première est OK,

    Pour la deuxième, elle ne fonctionnera pas si NIV_Vehicule de la table Location contient des NULL, il faudrait plutôt écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT *
    FROM Vehicule V
    WHERE NOT EXISTS(
        SELECT 1
        FROM Location L
        WHERE L.NIV_Vehicule = V.NIV_Vehicule 
    )

Discussions similaires

  1. [VB6] Bloqué sur une requete SUM snif
    Par patdu65 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/07/2006, 09h12
  2. pb sum dans requete hibernate
    Par clairette dans le forum Hibernate
    Réponses: 1
    Dernier message: 03/07/2006, 10h34
  3. [SQL Server] Requete récupérant les 2 max
    Par Franck2mars dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/04/2006, 13h45
  4. requete SQL avec valeur max
    Par oeil de nuit dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 08h58
  5. probleme de requete (SUM)
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 28/07/2005, 14h17

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