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 :

select valeur qui ont augmenté de x % [MySQL-8.0]


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Par défaut select valeur qui ont augmenté de x %
    Salut mes chers cracks et sauveurs

    Voici deux requêtes avec leurs affichages respectifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     select  commune, count(transaction.bien_id) AS nb_ventes_1erTrimestre
     from transaction
     join bien on bien.bien_id = transaction.bien_id 
     join localite on localite.localite_id = bien.localite_id
     where date_mutation between '2020-01-01' and '2020-03-31'
     group by commune
     order by nb_ventes_1erTrimestre DESC
    Nom : trimestre1.jpg
Affichages : 122
Taille : 27,0 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     select  commune, count(transaction.bien_id) AS nb_ventes_2erTrimestre
     from transaction
     join bien on bien.bien_id = transaction.bien_id 
     join localite on localite.localite_id = bien.localite_id
     where date_mutation between '2020-04-01' and '2020-06-30'
     group by commune
     order by nb_ventes_2erTrimestre DESC
    Nom : trimestre2.jpg
Affichages : 97
Taille : 26,8 Ko

    ça fait deux jours que je suis dessus, je n'arrive pas à trouver la fonction qui permettrait de concaténer ces deux résultats UNIQUEMENT si les valeurs de trimestre1 à trimestre2 on reçu une augmentation de20%...

    chaque fois que j'essaie quelque chose entre les deux select c'est soit une syntax error, soit "operand should contain 1 column" ...

    J'ai pensé à select IF() mais avec les communes dans chacune des parenthèses ça ne marche pas car commune n'est pas un nombre

    Et si je veux mettre la colonne des commune à la fin de l'ensemble des select, ça me met qu'une seule row avec une commune random... et une row avec le total (count) des transaction... Je sais vraiment plus où aller

    j'aimerais que mon résultat final ressemble à ça
    Nom : trimestre1-2-evolution.jpg
Affichages : 100
Taille : 37,5 Ko

    sans afficher les rows où trimestre2 n'a pas augmenté de 20% par rapport à trimestre 1...

    Je sais que je vous en demande beaucoup sur ce coup alors je ne le prendrai pas mal si mous m'envoyez bouler en me disant que j'ai pas assez cherché et que vous me mâcheriez le travail, mais une petite orientation serait la bienvenue tout de même
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Bonjour,

    Voici l'une des manières d'effectuer les comptages sur deux trimestres dans la même requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select  lcl.commune
        ,   sum(case when trs.date_mutation between '2020-01-01' and '2020-03-31' then 1 else 0 end) AS nb_ventes_1erTrimestre
        ,   sum(case when trs.date_mutation between '2020-04-01' and '2020-06-30' then 1 else 0 end) AS nb_ventes_2erTrimestre
    from    transaction as trs
        inner join 
            bien        as ben
            on  ben.bien_id = trs.bien_id 
        inner join
            localite    as lcl 
            on  lcl.localite_id = ben.localite_id
    where   trs.date_mutation between '2020-01-01' and '2020-06-30'
    group by lcl.commune
    order by nb_ventes_2erTrimestre DESC
    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 averti
    Homme Profil pro
    data analyst
    Inscrit en
    Juillet 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : data analyst

    Informations forums :
    Inscription : Juillet 2021
    Messages : 26
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Bonjour,

    Voici l'une des manières d'effectuer les comptages sur deux trimestres dans la même requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select  lcl.commune
        ,   sum(case when trs.date_mutation between '2020-01-01' and '2020-03-31' then 1 else 0 end) AS nb_ventes_1erTrimestre
        ,   sum(case when [...]

    merci al1_24 !!

    je ne connaissais pas encore le "case" du coup j'ai pu finir ma requête de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      select  commune,
     sum(date_mutation between '2020-01-01' and '2020-03-31') AS nb_ventes_1erTrimestre,
     sum(date_mutation between '2020-04-01' and '2020-06-30') AS nb_ventes_2emeTrimestre,
     case when sum(date_mutation between '2020-04-01' and '2020-06-30')
     >= sum(date_mutation between '2020-01-01' and '2020-03-31') * 1.2 
     then 'oui' else 'non' end as 'augmentation_de_20%_minimum'
    from    transaction
        inner join bien  on  bien.bien_id = transaction.bien_id 
        inner join localite  on  localite.localite_id = bien.localite_id
    where   date_mutation between '2020-01-01' and '2020-06-30'
    group by commune
    order by nb_ventes_2emeTrimestre DESC;
    Nom : result.jpg
Affichages : 73
Taille : 49,6 Ko

    (en réduisant un maximum le nombre de caractères de ma requête pour "l'alléger" )

    Tu noteras que j'ai enlevé également les "case when else then" que tu avais proposé car ça me donnait le même résultat sans les mettre

    Je te pose alors la question : dans quel but voulais-tu utiliser cette clause pour les deux "sum" ?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Citation Envoyé par moonlight09 Voir le message
    Je te pose alors la question : dans quel but voulais-tu utiliser cette clause pour les deux "sum" ?
    Parce que c'est une particularité de MySQL de mélanger les types booléens et numériques.

    Telle que tu l'as écrite, ta requête générera des erreurs de syntaxe dans la majorité des SGBD... et j'ai pour habitude d'essayer dans la mesure du possible d'écrire du code "portable"
    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.

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

Discussions similaires

  1. [AC-365] Concaténer des valeurs qui ont le même identifiant sous access
    Par shakapouet dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/04/2021, 23h46
  2. SELECT des lignes qui ont exactement 4 valeurs sur la colonne ?
    Par mamiberkof dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/01/2008, 15h00
  3. Réponses: 2
    Dernier message: 14/08/2007, 16h18
  4. Réponses: 3
    Dernier message: 20/01/2007, 19h09
  5. Réponses: 1
    Dernier message: 09/10/2006, 21h31

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