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 :

Nombre d'employés recrutés au second semestre


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 502
    Points : 770
    Points
    770
    Par défaut Nombre d'employés recrutés au second semestre
    Bonjour les développeurs.
    On me demande la requête suivante en SQL:
    "Liste des années (2000,2001,2002,2003,2004,2005) et le nombre d'employés recruté au second semestre de chaque année.

    Voilà ma proposition.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TO_CHAR(hire_date, 'yyyy' ), COUNT(employee_id)
    FROM employees
    WHERE TO_CHAR(hire_date,' yyyy') IN (2000,2001,2002,2003,2004,2005)
    GROUP BY TO_CHAR(hire_date, 'yyyy') 
    ORDER BY TO_CHAR(hire_date, 'yyyy') ASC;

    Ça s'exécute mais ne donne pas le résultat attendu.

    Cordialement.

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Cette requete donne le nombre d'employés recrutés dans l'année. Il faut que tu ajoutes le filtre '2ème semestre'.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 502
    Points : 770
    Points
    770
    Par défaut
    Bonjour et merci pour votre précieux temps que vous utilisez pour me répondre.
    C'est là mon problème. Comment le faire ?

    Cordialement.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Une question bien posée est une question facilement résolue. Si tu savais que c'était ça le problème, il fallait mettre dans ta question : 'comment filtrer sur le 2nd semestre'.
    Si tu ne sais pas ce que ça veut dire second semestre, il faut le demander.
    Si tu comprends la question, mais que tu ne sais pas trouver le mois à partir de la date, il faut le dire.
    Si tu ne sais pas comment tester si un nombre est entre 7 et 12, il faut le dire.
    Dans ta requête actuelle, il y a des trucs 'très compliqués', comparés à ce que tu demandes.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 502
    Points : 770
    Points
    770
    Par défaut
    Bonjour, j'ai trouvé la salution à mon problème

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT TO_CHAR(hire_date, 'yyyy' ), COUNT(employee_id)
    FROM employees
    WHERE TO_CHAR(hire_date,' yyyy') IN (2000,2001,2002,2003,2004,2005)
    AND TO_CHAR(hire_date, 'ddd') between TO_CHAR ('183') AND TO_CHAR ('366')
    GROUP BY TO_CHAR(hire_date, 'yyyy') 
    ORDER BY TO_CHAR(hire_date, 'yyyy') ASC;

    Cordialement.

  6. #6
    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 801
    Points
    30 801
    Par défaut
    As-tu bien vérifié que, pour toutes ces années, le second semestre commence le 183ème jour ?
    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.

  7. #7
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 502
    Points : 770
    Points
    770
    Par défaut
    Bonjour, je propose une deuxième requête pour votre appréciation. Il faut noter qu'en testant la requête elle marche. je voudrais juste savoir si elle est optimale.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    SELECT TO_CHAR(hire_date, 'yyyy' ), COUNT(employee_id)
    FROM employees
    WHERE TO_CHAR(hire_date,' yyyy') IN (2000,2001,2002,2003,2004,2005)
    AND TO_CHAR(hire_date, 'mm') between TO_CHAR ('07') AND TO_CHAR ('12')
    GROUP BY TO_CHAR(hire_date, 'yyyy') 
    ORDER BY TO_CHAR(hire_date, 'yyyy') ASC;

    Cordialement.

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Tester si le mois est entre 7 et 12, oui, c'est la bonne solution. C'est mieux que tester le n° de jour.

    Optimisation n°1 : tester si le mois est supérieur ou égal à 7, ça suffit. Le mois ne sera jamais supérieur à 12. Le moteur SQL fera donc une comparaison au lieu de 2.
    Optimisation n°2 : la fonction to_char() sert à convertir un nombre, ou une date en chaine de caractère. to_char('07'), ça ne sert à rien : on convertit la chaîne '07' en chaîne, donc on ne fait rien.
    Dans la requête, on peut remplacer to_char('07') par '07'.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    J'aurai plutôt écrit la requête ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      select to_char(hire_date, 'yyyy') as hire_year
           , count(employee_id)
        from employees
       where hire_date between date '2000-07-01' and '2005-12-31'
         and extract(month from hire_date) >= 7
    group by to_char(hire_date, 'yyyy')
    order by to_char(hire_date, 'yyyy') asc;
    Voire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      select to_char(hire_date, 'yyyy') as hire_year
           , count(employee_id)
        from employees
       where hire_date between date '2000-07-01' and '2000-12-31'
          or hire_date between date '2001-07-01' and '2001-12-31'
          or hire_date between date '2002-07-01' and '2002-12-31'
          or hire_date between date '2003-07-01' and '2003-12-31'
          or hire_date between date '2004-07-01' and '2004-12-31'
          or hire_date between date '2005-07-01' and '2005-12-31'
    group by to_char(hire_date, 'yyyy')
    order by to_char(hire_date, 'yyyy') asc;
    Avec une préférence pour la première, plus simple à ajuster.

  10. #10
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 502
    Points : 770
    Points
    770
    Par défaut
    Bonsoir les développeurs. Merci pour votre précieux temps.

    Cordialement.

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

Discussions similaires

  1. Datastage : nombre de ligne traitées par secondes
    Par coulio dans le forum DataStage
    Réponses: 1
    Dernier message: 26/08/2011, 13h46
  2. Connaitre le nombre de millisecondes d'une seconde ?
    Par bubulemaster dans le forum Débuter
    Réponses: 5
    Dernier message: 28/11/2007, 13h19
  3. Nombre de requêtes maximum par seconde ?
    Par Mobaladje dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/09/2007, 18h07
  4. Calculer le nombre de lettre taper par seconde
    Par amrock dans le forum C++
    Réponses: 5
    Dernier message: 06/07/2007, 10h46

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