Fonction SUM SQL

Résolu/Fermé
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 - 5 févr. 2020 à 15:49
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 - 6 févr. 2020 à 20:44
Bonjour, J'ai une table SQL qui me permet de gérer mes frais kilomètriques. Afin de pouvoir additionner tous mes kilomètres d'un même champ, j'ai utilisé la fonction SUM. Malheureusement j'ai dû faire deux requètes au lieu d'une seule sinon mon tableau me retourne simplement qu'une seule entrée à l'affichage. Par contre la fonction SUM joue bien son rôle.
Y a t-il possibilité de faire une seule requète. Je vous remercie.
Voici mes requètes.
		echo '<div id="tablo">';		
		echo '<table width="80%" border="2" cellspacing="1" cellpadding="4">';
		echo '<tr>';
		echo '<td class="sous-entete">Date</td>';
		echo '<td class="sous-entete">Trajet</td>';
		echo '<td class="sous-entete">Kilomètre</td>';
		echo '</tr>';

	$sql = "SELECT cdc_frais.km, SUM(cdc_frais.km) AS totalkm
			FROM cdc_frais";
	$result2 = executeQuery($sql,$datas);
	$donnees2 = $result2->fetch();

	$sql = "SELECT dtrajet, libelle, cdc_frais.km, YEAR(dtrajet) AS annee
			FROM cdc_frais
				LEFT JOIN cdc_trajet ON cdc_trajet.idtrajet = cdc_frais.idtrajet
			ORDER BY dtrajet ASC";
	$result = executeQuery($sql,$datas);

	$an = 0;

	while ($donnees = $result->fetch()) {
		if($donnees->annee != $an) {
			$an = $donnees->annee;
			echo '<h1>'.$title.' '.$an.' <br/>Soit '.$donnees2->totalkm.' Km</h1>';
		}

        echo '<tr>';
        echo '<td class="ligne1">'.dateFR($donnees->dtrajet).'</td>';
        echo '<td class="ligne1">'.$donnees->libelle.'</td>';
        echo '<td class="ligne1">'.$donnees->km.'</td>';           
        echo '</tr>';
    }
		echo '</table>';
		echo '</div>';

9 réponses

jee pee Messages postés 40559 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 décembre 2024 9 459
5 févr. 2020 à 16:04
Bonjour,

Dans ton exemple je ne comprends pas comment, sur quel(s) critère(s), tu veux regrouper les km.

Pour regrouper, il faut utiliser le GROUP BY, exemple

select annee, sum(km)
from table
group by  annee


0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 Ambassadeur 1 556
5 févr. 2020 à 16:31
bonjour, je pense que tu auras le même résultat avec cette seule requête:
SELECT tkm.totkm as totalkm, dtrajet, libelle, cdc_frais.km, YEAR(dtrajet) AS annee
FROM cdc_frais
	LEFT JOIN cdc_trajet ON cdc_trajet.idtrajet = cdc_frais.idtrajet
	JOIN (SELECT SUM(cdc_frais.km) AS totkm FROM cdc_frais) as tkm
ORDER BY dtrajet ASC
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
5 févr. 2020 à 17:32
Bonjour, Merci beaucoup yb_be c'est ce qui fallait.
Cordialement.
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
5 févr. 2020 à 17:38
le total des km, c'est le grand total, pas le total par an: c'est bien ce que tu veux?
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
5 févr. 2020 à 23:11
Exact je me suis trop précipité. Effectivement j'ai créé une entrée fictive une date en 2019 et ça la prends en compte dans le total des kms alors que ça ne devrait pas.
Déjà j'ai rajouté une clause WHERE pour n'afficher que l'année en cours.
WHERE YEAR(dtrajet) = YEAR(NOW())

mais pour le total des kms pour l'année en cours je ne vois pas?
je vous remercie.
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
6 févr. 2020 à 10:00
dtrajet est dans quelle table?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
6 févr. 2020 à 11:16
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
6 févr. 2020 à 11:17
dans la table cdc_frais
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
6 févr. 2020 à 11:23
je suis toujours avec mes deux tables.
	$sql = "SELECT idfrais, dtrajet, km, SUM(km) AS totalkm
			FROM cdc_frais
			WHERE YEAR(dtrajet) = YEAR(NOW())
			ORDER BY dtrajet ASC";
	$result2 = executeQuery($sql,$datas);
	$donnees2 = $result2->fetch();
		
	$sql = "SELECT idfrais, libelle, dtrajet, cdc_frais.km, YEAR(dtrajet) AS annee
			FROM cdc_frais
				LEFT JOIN cdc_trajet ON cdc_trajet.idtrajet = cdc_frais.idtrajet
			WHERE YEAR(dtrajet) = YEAR(NOW())
			ORDER BY dtrajet ASC";
	$result = executeQuery($sql,$datas);
	$an = 0;

	while ($donnees = $result->fetch()) {
		if($donnees->annee != $an) {
			$an = $donnees->annee;
			echo '<h1>'.$title.' '.$an.' <br/>Soit '.$donnees2->totalkm.' Km</h1>';
		}

        echo '<tr>';
        echo '<td class="ligne1">'.dateFR($donnees->dtrajet).'</td>';
        echo '<td class="ligne1">'.$donnees->libelle.'</td>';
        echo '<td class="ligne1">'.$donnees->km.'</td>';           
        echo '</tr>';
    }
		echo '</table>';
		echo '</div>';
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
6 févr. 2020 à 11:54
cette requête seule devrait donner le total des km par an:
SELECT yrkm as totalkm, dtrajet, libelle, cdc_frais.km, YEAR(dtrajet) AS annee
FROM cdc_frais
	LEFT JOIN cdc_trajet ON cdc_trajet.idtrajet = cdc_frais.idtrajet
	LEFT JOIN 
		(SELECT SUM(km) AS yrkm, YEAR(dtrajet) as yr FROM cdc_frais 
			group by YEAR(dtrajet)) as tkm 
		ON YEAR(dtrajet) = yr
ORDER BY dtrajet ASC
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
6 févr. 2020 à 14:30
Bonjour
Je vous envoi une capture pour voir ce que cela donne à l'affichage.
Il faudrait bien sûr en ce qui concerne l'an passé ne soit pas affiché. Sinon pour les kms par an c'est ok.
Merci
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
6 févr. 2020 à 17:54
si tu n'es intéressé que par l'année en cours:
SELECT yrkm as totalkm, dtrajet, libelle, cdc_frais.km, YEAR(dtrajet) AS annee
FROM cdc_frais
	LEFT JOIN cdc_trajet ON cdc_trajet.idtrajet = cdc_frais.idtrajet
	JOIN 
		(SELECT SUM(km) AS yrkm FROM cdc_frais 
			where YEAR(dtrajet) = YEAR( NOW() ) ) as tkm 
WHERE YEAR(dtrajet) = YEAR( NOW() )
ORDER BY dtrajet ASC
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
6 févr. 2020 à 20:44
Merci c'étais bien le total des kms sur l'année en cours que j'avais besoin. Je n'aurai jamais réussi à faire cette requète aussi complexe que ça. Merci encore.
Cordialement.
0