Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/09/2011, 11h42   #1
Membre régulier
 
Homme Julien SIMON
Ingénieur systèmes et réseaux
Inscription : février 2006
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Julien SIMON
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Transports

Informations forums :
Inscription : février 2006
Messages : 100
Points : 99
Points : 99
Par défaut Différence entre la somme de ma procédure et de la requête

Bonjour,

J'ai crée une procédure stockée qui me permet de sortir des statistiques de fréquentation pour des logements mais entre la requête executée directement dans mysql workbench et la procédure stockée que j'ai crée certaines sommes sont doublées :
Appel de la procédure
Code :
1
2
 
call location_generer_statistiques_saison('2011-04-09','2011-11-26','ETE 2011')
Code de la procédure
Code :
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
 
DELIMITER $$
 
CREATE DEFINER=`root`@`localhost` PROCEDURE `location_generer_statistiques_saison`(date_debut CHAR(10),date_fin CHAR(10),saison CHAR(10))
BEGIN
SELECT id_evenement, logement, 
SUM(total_demandes_enregistrees) AS total_demandes_enregistrees, 
SUM(total_demandes_attribuees) AS total_demandes_attribuees, 
SUM(total_journees_attribuees) AS total_journees_attribuees, 
SUM(total_semaines_attribuees) AS total_semaines_attribuees,  
SUM(total_journees) AS total_journees, 
SUM(total_semaines) AS total_semaines, 
SUM(total_journees) - SUM(total_journees_attribuees) AS total_journees_difference, 
SUM(total_semaines) - SUM(total_semaines_attribuees) AS total_semaines_difference, 
IF(ROUND(100 - ((SUM(total_journees) - SUM(total_journees_attribuees)) / SUM(total_journees) * 100)) IS NULL ,0,ROUND(100 - ((SUM(total_journees) - SUM(total_journees_attribuees)) / SUM(total_journees) * 100))) AS ratio_remplissage 
FROM (
 SELECT `d`.`id_evenement` AS `id_evenement`,REPLACE(`e`.`libelle`,'- NUITEE','') AS `logement`, 0 AS `total_demandes_enregistrees`,IF(isnull(sum(`d`.`demandes`)),0,sum(`d`.`demandes`)) AS `total_demandes_attribuees`,sum(IF((`d`.`journees` = 8),(`d`.`journees` - 1),`d`.`journees`)) AS `total_journees_attribuees`,TRUNCATE((sum(IF((`d`.`journees` = 8),(`d`.`journees` - 1),`d`.`journees`)) / 7),0) AS `total_semaines_attribuees`,0 AS `total_journees`,0 AS `total_semaines` 
 FROM (`location_demandes_synthese` `d` LEFT JOIN `evenement` `e` ON((`e`.`id_evenement` = `d`.`id_evenement`))) 
 WHERE ((`d`.`date_debut` BETWEEN date_debut AND date_fin) AND (`d`.`id_evenement_demande_statut` IN (1,11)) AND (`d`.`date_debut` < date_fin)) 
 GROUP BY REPLACE(`e`.`libelle`,'- NUITEE','') 
union ALL 
 SELECT `id_evenement` AS `id_evenement`,REPLACE(`libelle`,'- NUITEE','') AS `logement`, 0 AS `total_demandes_enregistrees`,0 AS `total_demandes_attribuees`,0 AS `total_journees_attribuees`,0 AS `total_semaines_attribuees`,sum(`duree`) AS `total_journees`, TRUNCATE((sum(`duree`) / 7),0) AS `total_semaines` 
 FROM `location_periodes_synthese` 
 WHERE ((`saison` = saison) AND (((`id_evenement_type` = 2) AND (`saison` IS NOT NULL)) OR (`id_evenement_type` = 4))) 
 GROUP BY REPLACE(`libelle`,'- NUITEE','') 
union ALL 
 SELECT `d`.`id_evenement` AS `id_evenement`,REPLACE(`e`.`libelle`,'- NUITEE','') AS `logement`, IF(isnull(sum(`d`.`demandes`)),0,sum(`d`.`demandes`)) AS `total_demandes_enregistrees`, 0 AS `total_demandes_attribuees`, 0 AS `total_journees_attribuees`, 0 AS `total_semaines_attribuees`, 0 AS `total_journees`,0 AS `total_semaines` 
 FROM (`location_demandes_synthese` `d` LEFT JOIN `evenement` `e` ON((`e`.`id_evenement` = `d`.`id_evenement`))) 
 WHERE ((`d`.`date_debut` BETWEEN date_debut AND date_fin) AND (`d`.`date_debut` < date_fin)) 
 GROUP BY REPLACE(`e`.`libelle`,'- NUITEE','')) 
travail 
GROUP BY logement;
END
Résultat :
Code :
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
+--------------+------------------------------+-----------------------------+---------------------------+---------------------------+---------------------------+----------------+----------------+---------------------------+---------------------------+-------------------+
| id_evenement | logement                     | total_demandes_enregistrees | total_demandes_attribuees | total_journees_attribuees | total_semaines_attribuees | total_journees | total_semaines | total_journees_difference | total_semaines_difference | ratio_remplissage |
+--------------+------------------------------+-----------------------------+---------------------------+---------------------------+---------------------------+----------------+----------------+---------------------------+---------------------------+-------------------+
|           41 | BEDOUS - 4 PLACES - 1        |                          20 |                         8 |                        40 |                         5 |            364 |             52 |                       324 |                        47 |                11 |
|           42 | BEDOUS - 4 PLACES - 2        |                           5 |                         4 |                        28 |                         4 |            364 |             52 |                       336 |                        48 |                 8 |
|           43 | BEDOUS - 4 PLACES - 3        |                           4 |                         4 |                        25 |                         3 |            364 |             52 |                       339 |                        49 |                 7 |
|           44 | BEDOUS - 4 PLACES - 4        |                           5 |                         5 |                        24 |                         3 |            364 |             52 |                       340 |                        49 |                 7 |
|           53 | BEDOUS - 4 PLACES - 5        |                          10 |                        10 |                        66 |                         9 |            364 |             52 |                       298 |                        43 |                18 |
|           54 | BEDOUS - 4 PLACES - 6        |                           6 |                         6 |                        42 |                         6 |            364 |             52 |                       322 |                        46 |                12 |
|          100 | BIDART - 6 PLACES            |                          44 |                        25 |                        21 |                         3 |             70 |             10 |                        49 |                         7 |                30 |
|           40 | BIELLE - 10 LITS             |                          13 |                        11 |                        33 |                         4 |            728 |            104 |                       695 |                       100 |                 5 |
|           37 | BIELLE - 4 LITS              |                           8 |                         8 |                        33 |                         4 |            728 |            104 |                       695 |                       100 |                 5 |
|           38 | BIELLE - 6 LITS - 1          |                           9 |                         9 |                        31 |                         4 |            728 |            104 |                       697 |                       100 |                 4 |
|           92 | BIELLE - 6 LITS - 2          |                           1 |                         1 |                         3 |                         0 |            728 |            104 |                       725 |                       104 |                 0 |
|          101 | CAPBRETON - 4 PLACES         |                          42 |                        24 |                        63 |                         9 |            119 |             17 |                        56 |                         8 |                53 |
|           48 | CAUTERETS - 8 PLACES         |                          22 |                        15 |                       105 |                        15 |            294 |             42 |                       189 |                        27 |                36 |
|          103 | CHANIERS - 4 PLACES          |                           3 |                         3 |                        13 |                         1 |            182 |             26 |                       169 |                        25 |                 7 |
|          104 | CHANIERS - 6 PLACES - 1      |                           3 |                         3 |                        12 |                         1 |            182 |             26 |                       170 |                        25 |                 7 |
|          105 | CHANIERS - 6 PLACES - 2      |                           0 |                         0 |                         0 |                         0 |            182 |             26 |                       182 |                        26 |                 0 |
|           46 | LA TREMBLADE PN - 4 PLACES   |                          19 |                        14 |                        86 |                        12 |            546 |             78 |                       460 |                        66 |                16 |
|           47 | LA TREMBLADE PN - 6 PLACES   |                          26 |                        18 |                       111 |                        15 |            546 |             78 |                       435 |                        63 |                20 |
|          102 | LEON - 6 PLACES              |                          68 |                        42 |                        80 |                        11 |            175 |             25 |                        95 |                        14 |                46 |
|           45 | LES EYZIES - 6 PLACES        |                          23 |                        19 |                       124 |                        17 |            546 |             78 |                       422 |                        61 |                23 |
|           98 | LOIX EN RE - 6 PLACES        |                          48 |                        19 |                        42 |                         6 |             84 |             12 |                        42 |                         6 |                50 |
|           49 | LUZ SAINT SAUVEUR - 4 PLACES |                           0 |                         0 |                         0 |                         0 |             56 |              8 |                        56 |                         8 |                 0 |
|           51 | PEYRAGUDES - 6 PLACES        |                           0 |                         0 |                         0 |                         0 |             84 |             12 |                        84 |                        12 |                 0 |
|           99 | SABLES D'OLONNE - 4 PLACES   |                          31 |                        14 |                        49 |                         7 |            168 |             24 |                       119 |                        17 |                29 |
|           50 | SAINT LARY - 6 PLACES        |                          24 |                        15 |                        95 |                        13 |            364 |             52 |                       269 |                        39 |                26 |
+--------------+------------------------------+-----------------------------+---------------------------+---------------------------+---------------------------+----------------+----------------+---------------------------+---------------------------+-------------------+
Mon nombre de journées est doublé alors que si je reprend les requêtes de la procédure en remplaçant donc mes variables par leurs valeurs j'obtiens les bons résultats, c'est à dire pile la moitié du nombre de jours total (dont découle nombre de semaines total) faussant mon ratio de remplissage.

Une idée ?

Merci
MightyDucks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h00.


 
 
 
 
Partenaires

Hébergement Web