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

Requêtes MySQL Discussion :

Problème différent (!=)


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Problème différent (!=)
    Bonjour à tous,

    J'ai un problème concernant une requête .

    J'ai une table nommée DEVIS et j'ai besoin de savoir grâce à elle, le nombre de devis effectué par mois en 2019 et le CA.
    Cependant je ne veux pas prendre en compte certains devis :
    le 45,46 ,51,134,596,618,624,723,730 ,800,977,1257,1731,2488,2906 ,3167 et le 3247

    J'ai essayé la requête suivante mais ca ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    select
    MOIS = month(Date_Creation),
    NOMBRE = count(*),
    TARIF = sum(Total_Vente_Euro)
     
    from
    DEVIS 
     
    where
    year(Date_Creation)=2019
    and N_Devis!=45 and N_Devis!=46 and N_Devis!=51 and N_Devis!=134 and N_Devis!=596 and N_Devis!=618
    and N_Devis!=624 and N_Devis!=723 and N_Devis!=730 and N_Devis!=800 and N_Devis!=977 and N_Devis!=1257
    and N_Devis!=1731 and N_Devis!=2488 and N_Devis!=2906 and N_Devis!=3167 and N_Devis!=3247
     
    group by month(Date_Creation)
    order by month(Date_Creation)
    j'ai essayé de remplacer le != par <> et not like mais ca ne change rien.

    Merci d'avance pour votre aide

  2. #2
    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
    Citation Envoyé par saphya Voir le message
    ca ne marche pas:
    Mais encore...
    La requête ne s'exécute pas et tu obtiens un message d'erreur ou elle s'exécute et les dossiers à exclure sont dans le résultat ?

    As-tu essayé avec NOT IN ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and N_Devis NOT IN (45,46 ,51,134,596,618,624,723,730 ,800,977,1257,1731,2488,2906 ,3167, 3247)
    La colonne N_Devis est-elle bien de type numérique ?
    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.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    hello!
    Déjà merci d'avoir pris le temps de m'aider

    La requête s'exécute mais les devis que je ne veux pas sont toujours présents dans le résultat.

    Je viens d'essayer avec not in mais pareil ca prend tjrs en compte les devis ...

    ET La colonne N_Devis est bien numérique (de type INT)

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonsoir,
    Citation Envoyé par saphya Voir le message
    La requête s'exécute mais les devis que je ne veux pas sont toujours présents dans le résultat
    Vu que la requête est le résultat d'un GROUP BY l'analyse comme quoi les devis indésirables sont toujours là est le résultat d'une opération inverse de votre part. Du moins, j'imagine.

    Trouvez vous effectivement des lignes indues dans la requête suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select *
    From DEVIS 
    where year(Date_Creation)=2019
    And N_Devis NOT IN (45,46 ,51,134,596,618,624,723,730 ,800,977,1257,1731,2488,2906 ,3167, 3247)
    On verra après pour la justification du résultat.
    Le savoir est une nourriture qui exige des efforts.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    je ne comprend pas ... avec la requête que m'avez donné, les devis (que je veux enlever) ne sont pas présents.
    Mais lorsque je remplace " * " par "count(*)" dans le select (de la meme requête), elle me les comptabilise.

    je vois vraiment pas ou est le problème, sachant que ces devis sont vraiment réel (on peut les voir dans la table DEVIS)

  6. #6
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,

    Bon c'est déjà un bon point de départ
    Maintenant il ne vous reste plus qu'à copier coller le résultat dans un tableur et faire les aggrégations "à la main".
    Ainsi vous devriez pourvoir justifier les résultats de la requête initiale.
    Le savoir est une nourriture qui exige des efforts.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Au final j'ai utilisé un autre champs de la table DEVIS pour ne pas prendre en compte les devis en question.
    Et ca marche ... parfaitement.

    Donc voila, merci encore d'avoir pris le temps de m'aider !
    Bonne journée à vous

  8. #8
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,

    Pouvez -vous préciser si le changement de la clause where fait que
    1- les conditionnelles sont maintenant prises en compte, alors qu'elles ne l'étaient pas auparavant
    2- la nouvelle formulation filtre de manière attendue les lignes, alors que l'ancienne formulation était non correcte

    C'est important de rapporter si c'est un bug ou une mauvaise utilisation.
    Le savoir est une nourriture qui exige des efforts.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    En effet avec les nouvelles conditions dans le where, les devis que je ne veux pas ne sont plus pris en compte, ce qui était mon objectif.
    L'ancienne formulation (en fonction du N_Devis) était bonne selon moi mais s'exécutait mal.
    Voila je ne sais pas si j'ai répondu à votre question.

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Afin que tout le monde puisse profiter de la solution, pouvez vous publier la nouvelle requête (celle qui donne satisfaction) et le DDL de la table (ordre CREATE TABLE avec toutes les colonnes et en particulier celles qui interviennent dans la restriction WHERE de l'ancienne requête et de la nouvelle)

  11. #11
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    @ saphya : votre requête a déjà une drôle de structure.

    1) qu'est-ce que vous avez cherchez à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select MOIS   = month(Date_Creation),
           NOMBRE = count(*),
           TARIF  = sum(Total_Vente_Euro)
    Cette façon d'écrire un select n'existe pas sous mysql !

    Si vous désirez renommer l'extraction, vous devez utiliser "AS" comme ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select  month(Date_Creation)  as mois,
            count(*)              as nombre,
            sum(total_vente_euro) as tarif
    Si vous désirez obtenir toutes les lignes de l'année 2019, on n'écrit pas cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where year(Date_Creation)=2019
    qui rend votre requête non sargable, mais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where Date_Creation between '2019-01-01' and '2019-12-31'
    Si vous désirez ne pas avoir certainement valeurs de votre devis, il suffit de les énumérer dans la clause "not in" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n_devis not in (45,46,51,134,596,618,624,723,730,800,977,1257,1731,2488,2906,3167,3247)
    En regroupant le tout, on obtient le bon résultat dans l'exemple ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `devis`
    --------------
     
    --------------
    create table `devis`
    ( `id`     integer  unsigned  not null auto_increment primary key,
      `date`   date               not null,
      `devis`  smallint unsigned  not null,
      `total`  decimal(15,2)      not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `devis` (`date`,`devis`,`total`) VALUES
      ('2017-12-31', 45, 1.00),
      ('2018-06-01', 45, 2.00),
      ('2018-06-02', 75, 3.00),
      ('2018-06-03', 88, 4.00),
      ('2018-06-04', 64, 5.00),
      ('2019-02-18', 64, 6.00)
    --------------
     
    --------------
    select * from `devis`
    --------------
     
    +----+------------+-------+-------+
    | id | date       | devis | total |
    +----+------------+-------+-------+
    |  1 | 2017-12-31 |    45 |  1.00 |
    |  2 | 2018-06-01 |    45 |  2.00 |
    |  3 | 2018-06-02 |    75 |  3.00 |
    |  4 | 2018-06-03 |    88 |  4.00 |
    |  5 | 2018-06-04 |    64 |  5.00 |
    |  6 | 2019-02-18 |    64 |  6.00 |
    +----+------------+-------+-------+
    --------------
    select    month(`date`) as mois,
              count(*)      as nombre,
              sum(total)    as tarif
     
        from  `devis`
     
       where  `date` between '2018-01-01' and '2018-12-31'
         and  `devis` not in (45, 88)
     
    group by  mois
    --------------
     
    +------+--------+-------+
    | mois | nombre | tarif |
    +------+--------+-------+
    |    6 |      2 |  8.00 |
    +------+--------+-------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    Le problème ne vient pas de mysql mais de votre requête qui est mal fichue !

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. [1.x] Problèmes différents templates
    Par blasil64 dans le forum Symfony
    Réponses: 21
    Dernier message: 07/04/2010, 18h07
  2. Problème différent type de date
    Par bobosh dans le forum IHM
    Réponses: 4
    Dernier message: 01/09/2008, 10h44
  3. Réponses: 4
    Dernier message: 02/06/2006, 16h30
  4. [Oracle] Problème de connexions simultanées différentes
    Par schnito dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/06/2006, 11h45
  5. [DOM] Problème entre différentes versions de java
    Par scorpiwolf dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 17/03/2005, 11h40

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