Fonction SQL SUM
RésoluLaChaux78 Messages postés 583 Date d'inscription Statut Membre Dernière intervention - 25 oct. 2024 à 17:10
- Fonction SQL SUM
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Logiciel sql - Télécharger - Bases de données
- Fonction somme excel - Guide
8 réponses
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 bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet GROUP BY ANNEE;
Je te conseille de d’abord tester les requêtes dans mysql pas directement dans php
Bonjour, merci pour ton aide, j'ai testé ta requête dans phpmy 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
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 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>';
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 phpmy 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 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 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 questionIl 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 bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' GROUP BY ANNEE WITH ROLLUP;
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 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 bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' GROUP BY ANNEE;
Merci.
Bonjour je verifie quelque chose et te redis je crois que c'est bon...
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 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 bag_trajet ON bag_trajet.idtrajet = bag_fraiskm.idtrajet WHERE YEAR(bag_fraiskm.dtrajet) = '2024' GROUP BY ANNEE;