Forum Programmation.SQL requête SQL

Posté par . Licence CC by-sa.
Tags : aucun
-3
20
avr.
2019

Bonjour,

Je dois écrire une requête SQL pour un site avec la base de donnée suivante:

REGIONS(NUM, NOM)
DEPARTEMENTS(NUM, NOM, REGION)
TRANCHES_AGES(ID, LABEL)
NIVEAUX_DIPLOMES(ID, LABEL)
NB_DIPLOMES_DEPT(AGE, NIVEAU, SEXE, DEPARTEMENT, ANNEE, NUM)

La relation REGIONS contient l'ensemble des 18 régions françaises,
La relation DEPARTEMENTS contient l'ensemble des départements français et le numéro de leur région d'appartenance (clé étrangère de l'attribut REGION vers l'attribut NUM de la relation REGIONS). Attention, au type de données de l'attribut num (char(3)).
Les relations TRANCHES_AGES et NIVEAUX_DIPLOMES contiennent les chaînes de caractères associés à chaque groupe fait par l'INSEE. Il y a 2 tranches d'ages et 4 niveaux de diplômes.
La relation NB_DIPLOMES_DEPT contient pour les hommes et les femmes le nombre de personnes diplômées par chaque tranche d'age, chaque niveau de diplômes sur plusieurs années. Les attributs AGE et NIVEAU sont des clés étrangères vers les attributs ID des relations correspondantes et l'attribut DEPARTEMENT est une clé étrangère vers l'attribut NUM de la relation DEPARTEMENTS.

L'objectif est de:

Créer un lien vers une page qui permet de choisir une tranche d'âge et un niveau de diplôme et en fonction de ces choix retourne la liste des départements et des années où il y a eu plus de diplômées femmes que de diplômés hommes.

J'ai déjà crée la page avec le formulaire en récupérant les bonnes valeurs.

J'ai écrit une requete qui renvoie quelque chose, mais je ne peux pas vraiment la vérifier…

" select distinct departements.nom, F.annee from
((select dept, annee, NUM from NB_DIPLOMES_DEPT join niveaux_diplomes on niveaux_diplomes.id=nb_diplomes_dept.niveau join
tranches_ages on tranches_ages.id=nb_diplomes_dept.age
where SEXE='F'
and niveaux_diplomes.label='BEP/CAP' and tranches_ages.label='25 ans ou plus' )as F join
(select dept, annee, NUM from NB_DIPLOMES_DEPT where SEXE='H') as H on F.dept = H.dept and F.annee = H.annee and F.num > H.num) join departements
on departements.num = F.dept;"

Pourriez-vous m'aider à le vérifier ? Merci

  • # Exercice de cours ?

    Posté par . Évalué à 3 (+2/-0).

    Salut :)

    S'il s'agit d'un exercice de cours, tu n'auras pas beaucoup d'aide ici malheureusement.

    J'ai écrit une requete qui renvoie quelque chose, mais je ne peux pas vraiment la vérifier…

    Sans accès aux données initiales et finales, on fait quoi ? On tire deux chiffres du chapeau et on compare ?

    Pourriez-vous m'aider à le vérifier ?

    Je ne suis absolument pas expert en SQL mais quand je vois :

    SELECT DISTINCT [...] FROM (
      SELECT [...] FROM (
        SELECT [...] FROM ( [...] )
      )
    )

    avec tous ces JOIN, j'ai peur ;)

  • # Décomposer le problème

    Posté par . Évalué à 2 (+0/-0).

    Tu aura besoin de faire des aggrégations pour compter les hommes et les femmes. Donc GROUP BY et COUNT.

    Pour simplifier la résolution du problème, il faut le décomposer. J'ai l'impression que tu pourrais d'abord travailler uniquement avec la table NB_DIPLOMES_DEPT.

    Si je ne me trompe pas tu n'as besoin des autres tables que pour traduire les id en label/noms intelligible. Donc tu peux le faire dans un second temps.

  • # merci

    Posté par . Évalué à 1 (+0/-0).

    Merci de vos réponses, j'ai réussi à l'écrire.

    Nouvelle question, j'ai écrit la requête suivante:

    select regions.nom from regions JOIN departements on
    departements.region=regions.num where departements.nom like 'G%';

    Elle marche dans le terminal, mais python ne me la prend pas … Je crois qu'il n'aime pas le G% ?

    Pourriez-vous m'aider ?

    Merci

    • [^] # Re: merci

      Posté par . Évalué à 1 (+0/-0).

      Salut :)

      j'ai réussi à l'écrire.

      Ok.

      Elle marche dans le terminal, mais python ne me la prend pas … Je crois qu'il n'aime pas le G% ?

      Sans code ni erreur, c'est assez hypothétique de conjecturer.

      Je dirais que python interprète ton % comme une séquence à remplacer.

      • [^] # Re: merci

        Posté par . Évalué à 1 (+0/-0).

        merci et du coup avez vous une suggestion pour l'écrire ?

        Merci

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.