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ête avec 2 conditions sur deux variables


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut Requête avec 2 conditions sur deux variables
    Bonsoir,

    je viens à vous pour une requête que je n'arrive à exprimer.

    Je veux afficher le pourcentage de voyage d'une ville de départ avec le nombre de départ total dans le même mois.

    J'avais pensé à cela : (bien que se soit faux je sais, mais c'est pour montrer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select count(idvol)/count(idvol) * 100
    from vols
    where villed = 'Mars'
    and dated like '%/04/%'
    Dans cette requête, je veux que le premier count(idvol) soit les vols ayant pour origine mars, mais que la condition du mois s'appliquent au deux.

    Havez vous le moyen de faire cela ? Merci beaucoup

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Si j'ai bien compris:
    Le premier count ne prend en compte que les vols dont l'origine est Mars
    Le deuxième count prend tous les vols en compte
    La condition de date s'applique aux deux

    Si c'est bien celà, j'essaierai quelque chose de ce genre:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT sum(case when villed = 'Mars' then 1 else 0 end)/count(idvol) * 100
    FROM vols
    WHERE dated LIKE '%/04/%'

    Tatayo

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    de plus, si dated est de type date, il faut mieux faire ceci, il faut mieux utiliser les expressions sur les dates pour retourner le mois plutôt que de faire ce like

  4. #4
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    Merci de vos réponses. Je fais du SQL sous Oracle depuis plusieurs année (en tant qu'étudiant bien sûr) et je n'avais jamais vus de condition de test :o bon d'un coté ce n'est pas mon domaine de prédilection.

    Pour ce qui est de la requête je la testerais demain, je n'ai pas d'accès à la base actuellement.

    > cybher, je vois plus ou moins ce que tu veux dire, mais j'ai l'impression que tu n'es pas allé au bout de ton exemple :p et je ne m'illustre pas très ben ta méthode. Tu pourrais me montrer stp ? Et soit dit en passant, m'expliquer en quoi penses tu qu'elle soit meilleur que la mienne ? (préférence, efficience, plus "stylé" ? :p )

    Merci

  5. #5
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Citation Envoyé par mensoif Voir le message
    Tu pourrais me montrer stp ? Et soit dit en passant, m'expliquer en quoi penses tu qu'elle soit meilleur que la mienne ? (préférence, efficience, plus "stylé" ? :p )
    Je pense qu'il voulait dire d'utiliser un truc du style suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sum(case when villed = 'Mars' then 1 else 0 end)/count(idvol) * 100
    FROM vols
    WHERE MONTH(dated) = '04'
    Pour moi, ce code est meilleur au niveau des performances puisqu'on ne transtype pas la date en chaîne de caractère pour ensuite aller vérifier si elle contient la chaîne '/04/'.

    Ensuite, au niveau du style, je trouve ça beaucoup plus élégant puisqu'on utilise des outils "faits pour".

    le code suivant
    me donne l'impression qu'on essaye de faire rentrer un cube dans un trou rond... (bon d'accord si le trou rond est suffisamment grand, ça marche, mais mais avec un trou carré, on pourrait se contenter d'un trou plus petit...)
    A bove ante, ab asino retro, a stulto undique caveto

  6. #6
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    > Arkhena

    Réponse très satisfesante. Merci.

  7. #7
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    Je voulais tout de même rajouter que month n'est pas une fonction présente par défault. Donc en attendant mieux je garde ma syntaxe.

  8. #8
    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
    Si vous êtes toujours sous Oracle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sum(case villed when 'Mars' then 1 else 0 end)/count(idvol) * 100
      FROM vols
     WHERE extract(month from dated) = 4;

  9. #9
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    Danke =)

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

Discussions similaires

  1. Requête avec comparaison dates sur deux colonnes
    Par DAVJO dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/02/2015, 10h22
  2. Réponses: 2
    Dernier message: 08/12/2014, 12h23
  3. Réponses: 7
    Dernier message: 08/08/2011, 11h42
  4. [AC-2000] Suppression ligne avec conditions sur deux tables
    Par Loufink dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 09/07/2009, 11h38
  5. Problème de requête avec une condition IN
    Par sorcer1 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/10/2005, 11h56

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