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 :

Requêtes SQL basiques


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Requêtes SQL basiques
    Bonjour, j'ai une nouvelle passion depuis peu: la base de données.
    Mais voilà, hier en m'adonnant à ma passion, je suis tombé sur des requêtes SQL coriaces que je n'arrive pas du tout à résoudre.
    Pouvez-vous me montrer le langage SQL de ces 5 requêtes afin que je puisse obtenir le résultat et pouvoir dormir la nuit s'il vous plait ?
    Voici les questions demandées:

    1 Liste des institutions (nom et type) avec le total des montants alloués par ordre décroissant
    2 Montant total des allocations des institutions pour les producteurs de type "x" (x est à renseigner lors de l'execution seulement)
    3 Liste des institutions (nom et type) finançant les particuliers et non des PME
    4 Liste des institutions par type ayant financé au moins 2 producteurs
    5 Le pourcentage des sommes financées par rapport aux sommes investies dans les centrales
    SCHEMA RELATIONNEL1
    PRODUCTEURS (NumP, NomP, TelP, EmailContactP, TypeP)
    ACHETEURS (NumA, NomA, TelA, ReprA)
    INSTITUTIONS (NumI, NomI, TypeI)
    BATIMENTS (NumB, TypeB, AdrB, CP, Ville, Region, MaxToitAutoB)
    CENTRALE_PH (NumC, ModeleC, CapaciteC, DateMES, DateRev, MontantInvest, NumB*)
    CONTRATS (NumCont, DateCont, Echeance, Prix1, Prix2, QteMaxAut, NumC*, NumB*, NumA*)
    FACTURES (NumFact, DateFact, DateDeb, DateFin, AncIndex, NvIndex, MontantFact, NumCont*, NumA*, NumP*)
    ALLOCATION (NumI*, NumP*, NumC*, Montant)
    POSSEDER (NumP*, NumB*, DateE, DateS)
    PRODUIRE (NumC*, NumA*, Annee, IndexA, IndexN)
    Merci d'avance à vous tous !
    Dernière modification par SergioMaster ; 10/04/2016 à 08h19. Motif: balises

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    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 633
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Alors bienvenue chez les fous

    Qui dit passion, dit... patience et aussi, comprendre vaut mieux qu'adopter une solution toute faite.

    Donc je vous recommande chaudement de consulter le B.A. BA du SQL, toute la vérité sur cette triste affaire est ici : http://www.developpez.net/forums/d68...q-langage-sql/

    Ames sensibles s'abstenir

    Après, nous serons nombreux pour vous aider à comprendre les points obscurs qui subsiteraient, vous macher le travail d'emblée ne serait pas vous aider

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Avril 2016
    Messages : 4
    Par défaut
    allé je nme lance


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select TI.NomI, TP.Nomp, sum(al.montant) from allocation TA
    inner join producteurs TP
    on TA.nump=TP.nump
    inner join institutions TI
    on TA.Numi=TI.Numi
    where TP.TypeP = variable
    group by TI.NomI, TP.Nomp

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Avril 2016
    Messages : 4
    Par défaut
    pardon erreur c'est ta.montant et pas AL.montant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select TI.NomI, TP.Nomp, sum(TA.montant) from allocation TA
    inner join producteurs TP
    on TA.nump=TP.nump
    inner join institutions TI
    on TA.Numi=TI.Numi
    where TP.TypeP = variable
    group by TI.NomI, TP.Nomp
    TI TA c'est les alias des tables

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Avril 2016
    Messages : 4
    Par défaut
    variable il faut remplacer par le type x que vous avez dans l'exercice

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 657
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 657
    Billets dans le blog
    65
    Par défaut
    Bonjour, un peu d'encouragement après toutes ces corrections pour manque de balises !

    pour la requête 1 -
    Liste des institutions (nom et type) avec le total des montants alloués par ordre décroissant
    vous y êtes presque ! @nyapad dans cette requête il n'y a pas besoin de variable, c'est dans la seconde demande qu'il y a cette notion, donc
    simplification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TI.NomI, TP.Nomp, SUM(TA.montant) as Total 
    FROM  allocation TA INNER JOIN producteurs TP ON TA.nump=TP.nump
    // clause WHERE de le seconde requête 
    GROUP BY TI.NomI, TP.Nomp
    reste ensuite à inclure l'ordre décroissant
    la faute du Post 3 : l'utilisation du GROUP BY, ne se fait pas sur la colonne à calculer mais sur les colonnes du Groupe
    le DESC ne se fait que sur des colonnes dans la clause ORDER BY

    pour la requête 2-
    Maintenant que vous avez la liste de la requête 1 il est facile de rajouter une clause
    entre le FROM et le GROUP BY, reste que pour mettre une variable cela dépend beaucoup du GUI que vous utilisez pour tester vos requêtes et même peut être aussi du SGBD donc , je n'ose pas trop indiqué (:Variable ou ?Variable ou ....)

    les requêtes 3,4,5 proposée essayez tout d'abord de normaliser un peu tout ça en utilisant les JOIN, les FROM Producteur P, Allocation A, Institution I WHERE c'est un peu obsolète et plus difficile à lire qu'un bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM Producteur P JOIN Allocation A ON ....
                              JOIN Institution I ON ....
    ce qui donne pour la requête 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT NomI, TypeI
    FROM Producteur P JOIN  Allocation A ON A.NumP=P.NumP
                               JOIN Institution I ON I.NumI=A.NumI
    WHERE P.TypeP = 'Particuliers' AND P.TypeP<>'PME';
    je préfère remplacer le NOT IN par un <>
    je n'ai pas corrigé la requête mais il semble manquer quelque chose puisque bien que non indiqué, il semble y avoir 1 à n allocations par institution, qu'un particulier peut peut être faire partie de 1 à n institutions (bref des indications non fournies, qu'un jeu d'essais absent ne vient pas confirmer ou infirmer)
    la lecture du tutoriel de SQLPro sur les Jointures est fortement recommandé

    et surtout, merci de ne pas oublier les balises de code (sélection du code + clic sur le bouton #) facile, et mise en page tellement plus lisible (sans parler de la mise en exergue de la syntaxe)

Discussions similaires

  1. Requête SQL basique creation champs
    Par GreatTeacherOnizuka dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/07/2014, 16h33
  2. Requêtes SQL basiques
    Par franck1001 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/03/2008, 19h05
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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