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 et SQL. Discussion :

Calcul pourcentage entre deux requetes


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2019
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2019
    Messages : 196
    Points : 40
    Points
    40
    Par défaut Calcul pourcentage entre deux requetes
    Salut à tous,

    En espérant que vous passez un excellent dimanche

    J'aurais une petite question sur le fait de calculer un pourcentage pour le cas suivant:

    J'ai deux requêtes avec critères pour filtrer au max en fonction du résultat que je souhaite et après leur exécution je cherche à présent à créer des statistiques de comparaison entre les résultats de ces deux requêtes et notamment le pourcentage qui les différencie.

    Exemple : requete1 = 1000 enregistrements & requete2 = 350 enregistrements

    Je souhaite calculer le pourcentage de la requête2 par rapport à la requete1 soit un calcul basique en mathématique : 35%

    J'ai essayé de bidouiller avec des requête de non correspondance puis ensuite calculer le compte mais je n'ai pas le résultat attendu.
    Est-il possible avec les fonctions natives d'Access deréaliser ce genre de calcul ? Si non bah auriez-vous des solutions pour arriver au résultat souhaité ?


    Cordialement,

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je passe un bon dimanche

    Avec une requête Requete_A et une autre Requete_B, tu peux utiliser la requête sql suivante (je pense qu'il est impossible d'utiliser le QBE pour cela, tu dois saisir la requête en mode SQL)

    L'idée est de créer deux sous-requêtes scalaires (qui renvoient un enregistrement d'une seule colonne), l'une comptant le nombre d'enregistrements de la première et l'autre le nombre d'enregistrements de la seconde. Il suffit alors, dans la requête principale, de diviser le résultat de l'une par le résultat de l'autre.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT a.CountOf/b.CountOf AS Resultat
    FROM (select count(*) as CountOf from requete_a)  AS a, (select count(*) as CountOf from requete_b)  AS b;


    Tu pourrais bien sûr créer les requêtes de dénombrement puis réaliser la division. Voici la requête qui dénombre les lignes de A (à copier et modifier pour dénombrer les lignes de B), et la requête que tu utilises pour calculer le résultat

    Nom : 2020-08-23_181234.png
Affichages : 1571
Taille : 5,8 Ko

    Nom : 2020-08-23_181305.png
Affichages : 1560
Taille : 5,9 Ko

  3. #3
    Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2019
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2019
    Messages : 196
    Points : 40
    Points
    40
    Par défaut Re
    Salut Pierre,

    D'abord merci pour ton retour

    Je pense avoir réussi à suivre ton tutoriel, j'obtiens un résultat qui me semble cohérent, merci beaucoup.

    Cordialement,

  4. #4
    Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2019
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2019
    Messages : 196
    Points : 40
    Points
    40
    Par défaut Bonjour
    Salut à tous,

    J'aimerais relancer ce sujet car j'obtiens pas réellement le résultat escompté niveau pourcentage, je m'explique :

    J'ai deux requêtes :

    "rqStats_Emplacement_compte" & "rqStats_Emplacement_vide_compte" avec respectivement comme résultat 28899 & 8426
    Le résultat attendu est donc : Que représente 8426 en pourcentage sur 28899 ? La valeur 8426 est 29.16 % sur un total de 28899 jusque la vous me suivez ?

    Passons maintenant à l'autre sujet, à savoir comment calculer cela sur Access avec le code SQL à pierre Fauconnier.
    Pour le moment j'obtiens 100% ce qui n'est pas normale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [rqStats_Emplacement_compte].[CountOf]/[rqStats_Emplacement_vide_compte].[CountOf] AS Resultat
    FROM (SELECT count(*) AS CountOf FROM rqStats_Emplacement_compte)  AS rqStats_Emplacement_compte, (SELECT count(*) AS CountOf FROM rqStats_Emplacement_vide_compte) AS rqStats_Emplacement_vide_compte;
    Pour le reste je donne ma langue au chat je ne sait pas quoi modifier sur mon SQL pour avoir un bon résultat.

    Cordialement,

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    Modifie les alias de tes sous-requêtes. Dans le code que je t'ai donné, je nommais la première As A et la seconde As B. Je ne sais pas tester pour l'instant, mais j'ai des doutes que donner comme alias le nom de la requête utilisée dans la sous-requête soit une bonne idée. Les noms des sous-requêtes, tu t'en fous un peu, et en plus, on essaie souvent de mettre des trucs très courts pour simplifier la lecture de la requête.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [a].[CountOf]/[b].[CountOf] AS Resultat
    FROM (SELECT count(*) AS CountOf FROM rqStats_Emplacement_compte)  AS a, (SELECT count(*) AS CountOf FROM rqStats_Emplacement_vide_compte) AS b;


    Il se pourrait que cela résolve le problème que tu rencontres. Quoi qu'il en soit, si tu obtiens 1 (100%), c'est que tu divises une valeur par elle-même. Tu peux passer par deux requêtes enregistrées comme je l'ai montré en toute fin de ma première réponse. Ca te permettra de découper ton calcul et de bien vérifier que tu obtiens 8426 et 28899 comme nombre sur chaque CountOf.

  6. #6
    Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2019
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2019
    Messages : 196
    Points : 40
    Points
    40
    Par défaut Re
    Salut Pierre,

    En effet j'ai renommé mes requêtes principales en "Requete_A" & "Requete_B" et mes requêtes de comptage en countOf_A & countOf_B et j'obtiens bien mes 29%
    Par contre mise à part le changement de nom pour moi ça reste la même chose niveau configuration non ?

    J'aimerais avoir quelques explications sur le procédé du code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT a.CountOf/b.CountOf AS Resultat
    FROM (select count(*) as CountOf from requete_a)  AS a, (select count(*) as CountOf from requete_b)  AS b;
    Pourquoi fait-on appel en deuxième ligne à "requete_A" et "requete_B" ? sachant que le calcul se trouve déjà dans "countOf_A" et "countOf_B" ?
    Pour moi à ce stade nous n'avons pas besoin de mentionné ces deux requêtes principales.

    Autre exemple :

    Avec mes requêtes de comptage "countOf_A" et "countOf_B" il me suffit de faire un calcul et j'obtiens aussi la même chose de la manière suivante :

    Je crée une nouvelle requête

    Nom : 2020-08-31_17h32_53.png
Affichages : 1593
Taille : 9,4 Ko

    Je fait un calcul directement dans "champ" comme démontré dans l'image et j'obtiens mes 29%

    Pour finir en SQL sa donne ceci si tu voulais savoir ce que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [countof_A]![countof]*100/[countof_B]![countof] AS Totaux
    FROM countOf_A, CountOf_B;
    Peut-être que je m'emmêle les pinceaux avec les noms que tu donne aux requêtes, par exemple a.count je ne voie pas ce que c'est alors que la requête s'appelle countOf_A

    Évidement je pose ces questions pour comprendre de manière à pouvoir reproduire la même chose moi-même la prochaine fois.

    Merci

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    Ce que tu fais dans ton "autre exemple", c'est la deuxième solution que je te proposais dans ma première réponse. On crée deux requêtes qui calculent le nombre de lignes de A et de B, et on divise le résultat de la Requête A par le résultat de la requête B. Ton "autre exemple" et ma seconde solution utilisent donc le même procédé.

    Dans la première solution avec les sous-requêtes, on calcule simplement Requête A et Requête B à l'intérieur de la requête de division au lieu de les calculer en externe. Ca permet de ne pas peupler la liste des requêtes du panneau de navigation, mais le principe est le même. Deux requêtes (ici les sous-requêtes) calculent le nombre de lignes et on divise le résultat de l'une par le résultat de l'autre.

    Si tes données sont dans la même table, on peut probablement se passer des sous-requêtes, mais sauf erreur, tu ne mentionnais pas cela.

    Voici un exemple qui établit le rapport entre les contrats signés et les contrats non signés, sur base du fait que la date de signature est renseignée ou est NULL.

    L'exemple reprend 3 contrats signés pour 10 non signés.

    Tu pourrais avoir ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Sum((IsNull([datesignature])=False))/Sum((IsNull([datesignature]))) AS Valeur
    FROM Contrat;

    J'ai peut-être vu trop complexe sur base de ton exemple initial. Il faudrait, pour pouvoir t'aider efficacement, que tu expliques ce que font tes requêtes, quelles sont leurs sources et leurs clauses WHERE.

  8. #8
    Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2019
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2019
    Messages : 196
    Points : 40
    Points
    40
    Par défaut Re
    Pierre,

    Si tes données sont dans la même table, on peut probablement se passer des sous-requêtes, mais sauf erreur, tu ne mentionnais pas cela.
    Dans la première solution avec les sous-requêtes, on calcule simplement Requête A et Requête B à l'intérieur de la requête de division au lieu de les calculer en externe. Ca permet de ne pas peupler la liste des requêtes du panneau de navigation, mais le principe est le même. Deux requêtes (ici les sous-requêtes) calculent le nombre de lignes et on divise le résultat de l'une par le résultat de l'autre.

    Oui mes données sont dans la mème table mais j'utilise deux requêtes avec multi-critères bien précis pour filtrer au max les données de ma table, donc ces deux requêtes de premier tri me semble indispensable. Ensuite me passer des sous-requête, en effet j'aurais pu très bien calculer mes totaux directement dans la requête de division pour avoir mes "countOf" et dans le même temps appliquer ma division du résultat, c'est bien de cela dont tu parlais ?

    Cordialement,

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

Discussions similaires

  1. [XL-2010] Calcul en pourcentage entre deux dates.
    Par Hello90 dans le forum Excel
    Réponses: 10
    Dernier message: 06/06/2018, 09h08
  2. calcul différence entre deux heures dans une requete
    Par cornet04 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/03/2015, 16h37
  3. calculer la différence en pourcentage entre deux champs sql
    Par sihammaster dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/07/2011, 17h48
  4. Calcul de pourcentage entre deux champs
    Par waelos dans le forum BIRT
    Réponses: 2
    Dernier message: 14/11/2008, 13h49
  5. [Requete] Calcul Somme entre deux temps pour chaque jour
    Par nico33307 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 21/03/2006, 00h58

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