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

SQL Oracle Discussion :

Exercice sur les fonctions de regroupement


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Exercice sur les fonctions de regroupement
    Bonjour,

    J'ai besoins d'aide dans un exercice sur les fonctions de groupe. Je dispose d'une base de donnée contenant une table EMPLOYEES qui contenant plusieurs éléments dont EMPLOYEE_ID et HIRE_DATE (seul ces deux éléments nous intéresse pour cet exercice). Il faux que j'affiche le nombre d'employé total, le nombre d'employé embauché en 1995, 1996, 1997 et 1998 en 5 colonne (voir l'image jointe)
    Nom : 4gUUXjq.png
Affichages : 658
Taille : 32,2 Ko
    Je sais comment afficher le nombre d'employé total:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT count(employee_id) as "Total"
    FROM employees;
    Je sais également comment afficher le nombre d'employé embauché à une date précise (exemple avec 1995):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(employee_id) as "Total"
    FROM employees
    WHERE hire_date like '%1995'
    Mais je ne parviens pas à afficher ces 5 résultat en 5 colonne comme le screen le montre.
    Quelqu'un aurait une idée pour parvenir au résultat demandé?

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    hire_date est un varchar ? parce qu'il me semble que c'est une date et que cette notation est fausse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE hire_date like '%1995'

    Pour avoir une colonne avec une restriction, tu peux utiliser CASE ou DECODE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(employee_id) AS "Total",
    	SUM(CASE WHEN EXTRACT(YEAR FROM hire_date) = 2005 THEN 1 ELSE 0 END)
    FROM hr.employees
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Cherche un peu auTour du mot clé PIVOT
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Merci de vos réponse,
    pour hire_date, c'est une date. La donnée a le forme jj/mm/aa . Je viens effectivement de voir que je n'utilisait pas la bonne ligne pour une condition pour la date. Je dois normalement utiliser WHERE hire_date BETWEEN '01/01/95' AND '31/12/95 ou encore EXTRACT(YEAR FROM hire_date)=1995

    Après avoir regardé, je pense que c'est effectivement avec CASE qu'i l faut que je le fasse en en faisant 4 différent pour mes 4 date demandé.

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    La donnée a le forme jj/mm/aa
    Non. C'est une erreur courante de débutant Sql.
    Une date n'a pas de forme : Une date est une date.
    On peut afficher une date avec to_char(ladate, format), renvoie une chaine de caractère.
    Il y a une affichage par défaut des dates (niveau session, niveau base)
    On peut créer une date avec un To_date(chaine_representant_une_date, format).

    Il vaut mieux toujours faire des restrictions sur des dates, et pas combiner date et chaine de caractères comme tu le fais : hire_date BETWEEN '01/01/95'

    Soit hire_date BETWEEN TO_DATE('01/01/95', 'DD/MM/YY') ...
    Soit TO_CHAR(hire_date, 'YYYY') = '1995'
    Soit TO_NUMBER(TO_CHAR(hire_date, 'YYYY')) = 1995
    Soit EXTRACT(YEAR FROM hire_date) = 1995


    Dernière chose, je ne pense pas que PIVOT fasse exactement ce dont tu as besoin (du fait que tu veuilles le nombre total d'employés)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

Discussions similaires

  1. Exercice sur les fonctions
    Par yoelhazan dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 06/12/2014, 19h25
  2. exercice sur les fonctions
    Par goldensun dans le forum Débuter
    Réponses: 6
    Dernier message: 26/10/2008, 15h57
  3. Exercice sur les fonctions
    Par jeje-2309 dans le forum Mathématiques
    Réponses: 7
    Dernier message: 01/10/2007, 12h04

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