Fonction SQL SUM
RésoluLaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 - 25 oct. 2024 à 17:10
- Fonction SQL SUM
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Snapchat ils m'ont ajouté par la fonction recherche - Forum Snapchat
- Fonction remplacer word - Guide
8 réponses
24 oct. 2024 à 19:12
Bonjour,
Quand on utilise SUM(), on ne peut pas avoir les lignes détails. Que veux tu additionner ? Pour les kms par année ce pourrait être :
SELECT YEAR(bag_fraiskm.dtrajet) AS ANNEE, SUM(bag_trajet.km) AS TOTAL_KM FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet GROUP BY ANNEE;
Je te conseille de d’abord tester les requêtes dans mysqladmin pas directement dans php
24 oct. 2024 à 20:42
Bonjour, merci pour ton aide, j'ai testé ta requête dans phpmyadmin et c'est bien ce que je voulais.
Maintenant je vais essayer de l'adapter dans ma page. Que veux tu dire
Quand on utilise SUM(), on ne peut pas avoir les lignes détails
Merci
25 oct. 2024 à 09:05
Bonjour, je reviens vers toi, j'ai adapté ta requète sur ma page et il se trouve que cela ne me retourne uniquement 1 seule ligne, c'est à dire la première de la colonne.. Peux tu me dire ce que tu en penses, merci beaucoup.
$sql = "SELECT YEAR(bag_fraiskm.dtrajet) AS ANNEE, SUM(bag_trajet.km) AS TOTAL_KM, idfrais, bag_fraiskm.idtrajet, dtrajet, bag_fraiskm.km, bag_trajet.idtrajet, libelle, bag_trajet.km FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '$annee' GROUP BY ANNEE"; $result = executeQuery($sql,$datas); $nblignes = $result->rowCount();// Liste de déplacements if($nblignes) { while ($donnees = $result->fetch()) { echo '<div class="nb_trajet"><h1>Liste de déplacements '.$annee.' Soit '.$donnees->TOTAL_KM.' Km</h1>'; echo '<table width="80% border="0" cellpadding="0" cellspacing="0">'; echo '<tr><td colspan="3" height="20" class="note">Année '.$annee.'</td></tr>'; echo '<td class="c2" height="20">Date</td><td class="c2" height="20">Trajet</td><td class="c2" height="20">km</td></tr>'; echo '<tr>'; echo '<td class="c3" height="20">'.dateFR($donnees->dtrajet).'</td>'; echo '<td class="c3" height="20">'.$donnees->libelle.'</td>'; echo '<td class="c3" height="20">'.$donnees->km.'</td>'; echo '</tr>'; } } else { echo '<div class="nb_trajet"><h1>Liste de déplacements '.$annee.' Soit '.$donnees->TOTAL_KM.' Km</h1>'; echo '<table width="80% border="0" cellpadding="0" cellspacing="0">'; echo '<tr><td colspan="3" height="20" class="note">Année '.$annee.'</td></tr>'; echo '<td class="c2" height="20">Date</td><td class="c2" height="20">Trajet</td><td class="c2" height="20">km</td></tr>'; echo '<tr><td colspan="2" class="no">Pas de saisie en '.$annee.'</td></tr>'; } echo '</table>'; echo '<p>Choisir une autre année : <input type="text" name="annee" size="4">'; echo '<input type="submit" name="submit" value="Afficher"></p>'; echo '</div>';
Modifié le 25 oct. 2024 à 10:21
Quand on utilise SUM(), on ne peut pas avoir les lignes détails
C'est exactement ce cas là, ta requete n'a pas de sens. Soit tu as la somme soit tu as les lignes détails. Pas les 2. Peut être peux tu faire le cumul des lignes en php ?
J'avais l'habitude de traiter des cas comme cela en faisant des unions de plusieurs requetes, là une pour les lignes, l'autre pour le total. A tester toujours dans phpmyadmin pour valider la syntaxe
SELECT YEAR(bag_fraiskm.dtrajet) AS ANNEE, NULL AS TOTAL_KM, idfrais, bag_fraiskm.idtrajet, dtrajet, bag_fraiskm.km, bag_trajet.idtrajet, libelle, bag_trajet.km FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' UNION SELECT YEAR(bag_fraiskm.dtrajet) AS ANNEE, SUM(bag_trajet.km) AS TOTAL_KM, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' GROUP BY ANNEE;
Là comme on ne traite qu'une seule année, selectionnée par le WHERE, on pourrait même supprimer le group by
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question25 oct. 2024 à 10:32
Il existe une option pas présente dans tous les SGBD, mais qui devrait marcher dans mysql, GROUP BY WITH ROLLUP
SELECT YEAR(bag_fraiskm.dtrajet) AS ANNEE, SUM(bag_trajet.km) AS KM, idfrais, bag_fraiskm.idtrajet, dtrajet, bag_fraiskm.km, bag_trajet.idtrajet, libelle, bag_trajet.km FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' GROUP BY ANNEE WITH ROLLUP;
25 oct. 2024 à 15:41
Bonjour avec la commande UNION j'ai une ligne en trop lors du résultat.
SELECT YEAR(bag_fraiskm.dtrajet) AS ANNEE, NULL AS TOTAL_KM, idfrais, bag_fraiskm.idtrajet, dtrajet, bag_fraiskm.km, bag_trajet.idtrajet, libelle, bag_trajet.km FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' UNION SELECT YEAR(bag_fraiskm.dtrajet) AS ANNEE, SUM(bag_trajet.km) AS TOTAL_KM, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' GROUP BY ANNEE;
Merci.
25 oct. 2024 à 16:05
Bonjour je verifie quelque chose et te redis je crois que c'est bon...
25 oct. 2024 à 16:26
Il y a nécessairement un ligne pour le total. Tu peux avoir une meilleure présentation avec
SELECT '' AS ANNEE, idfrais, bag_fraiskm.idtrajet, dtrajet, bag_fraiskm.km, bag_trajet.idtrajet, libelle, bag_trajet.km FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' UNION SELECT YEAR(bag_fraiskm.dtrajet) AS ANNEE, '', '', 'TOTAL' , SUM(bag_trajet.km), '', '', '' FROM bag_fraiskm LEFT JOIN bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' GROUP BY ANNEE;
25 oct. 2024 à 17:10
Un grand merci tout fonctionne normalement.