Aller au contenu

Compter les résultat d'une colonne SQL


Sujets conseillés

Posté

Bonjour à tous,

J'ai un petit souci pour compter tous les résultat d'une colonne dans ma table. Ma table s'appelle "conso", et la colonne en question est "litres". Dedans il y

uniquement des chiffres, logique ce sont des litres... Alors voilà, imaginon qu'il y ait ces champs dans mes "litres" :

10

5

5

10

J'aimerais compter ces résultats, sans compter le premier.

Au départ j'avais fait ceci :


mysql_query ("SELECT SUM(litres) AS total FROM conso ORDER BY id ASC");

Et bien entendu, ça me sort un résultat de " 30 ". En suite j'ai ajouté un " LIMIT 1 , 0 ", pour que ça ne compte pas le premier résultat, mais ça n'est visiblement pas possible dans un select sum d'y ajouter un limit.

Bref, j'espère avoir été assez clair, et que vous pourriez m'aider à résoudre mon problème smile.gif

Merci d'avance

Posté

Salut,

De ce que j'en sais, tu dois obligatoirement avoir un critère te permettant d'exclure certains enregistrement de ta requete. Dans ton cas, en admettant que tu aies une autre colonne index autoincrémentée, tu pourras rajouter dans ta requete : FROM conso WHERE Nom_Champ_Autoinc != 'une_certaine_valeur'

Egalement, pour ne pas inclure les valeurs = 10 : FROM conso WHERE litres != '10' mais ta quatrième ligne sera alors également exclue...

Bref pas de méthode miracle, donc bon courage à toi !

Posté

Merci à toi, en effet c'est pas l'idéale :)

En fait il faut que chaque première ligne de chaque mois, ne soit pas prise en compte. Donc malheureusement ta solution ne sera pas bonne :(

Posté

Le LIMIT s'applique sur les lignes que le SELECT aurait données sans le LIMIT, pas sur les lignes qu'il utilise en interne. Pour ça, il faut utiliser une sous-requête:

SELECT sum(litres) FROM (SELECT litres FROM conso ORDER BY id LIMIT 1,0) s

Jacques.

Posté

Salut Jacques,

Le petit " s " en bout de ligne, c'est une erreur ou non ?

Sinon j'ai fait ça, mais ça ne fonctionne pas :


$sql = mysql_query ("SELECT sum(litres) FROM (SELECT litres FROM conso ORDER BY id ASC LIMIT 1,0"));
$somme = mysql_result ($sql,0);
echo $somme;

:(

Posté

Non le "s" est volontaire, c'est le nom de la sous-requête, qui est nécessaire. Tu peux utiliser le nom que tu veux, mais tu doit en donner un.

Dans le bout de code que tu donnes, outre le nom de la sous-requête manquant, tu as inversé les " et la ) à la fin, donc ce n'est ni du PHP valide ni du SQL valide. D'ailleurs je pense que php doit te le dire de façon très claire.

Jacques.

EDIT: typo

Posté

Hello, en effet j'ai inversé le " avec la ) . Cependant je vois pas du tout où placer ton " s ", je suis désole je n'ai jamais utilisé cette fonction au bout d'une ligne SQL.

En reprenant mon exemple, peux tu me dire où ça cloche stp :


$sql = mysql_query ("SELECT sum(litres) FROM (SELECT litres FROM conso ORDER BY id ASC LIMIT 1,0)s");
$somme = mysql_result ($sql,0);
echo $somme;

Car là je n'ai plus d'erreur, ça n'affiche rien du tout en fait :)

Posté

Logiquement, ça veut dire qu'il n'y a aucune ligne renvoyée par la sous-requête. Si tu ne tapes que la sous-requête, ça donne quoi?

Jacques.

Posté

C'est vraiment bizarre, voilà ce que me sort la sous requète :

1.jpg

Je laisse un imprim écran de ma table conso, ça te parlera sûrement plus :

2.jpg

Vois tu où est le souci, pour faire un sum de mes litres, sans prendre la première ligne de ma table avec le limit ?

Merci

Posté

J'avais repris le LIMIT 1,0 que tu avais donné (je n'utilise pas mysql mais postgresql qui a une syntaxe différente: OFFSET 1), mais ce n'est pas la bonne méthode pour sauter la première ligne (ça revient à dire "0 lignes après la première"). Il faut utiliser un LIMIT 1,beaucoup, par exemple LIMIT 1,1000000000.

Jacques.

Posté

Ah mince, juste un dernier détail, quand je fais un sum de mes litres, il ne me prend pas en compte tout ce qui est après la virgule. Donc ma moyenne est faussée. Pour rappel mon code ressemble à ça :


$sql = mysql_query ("SELECT sum(litres) FROM (SELECT litres FROM conso WHERE mois=11 ORDER BY id ASC LIMIT 1,1000000)s");
$somme = mysql_result ($sql,0);
echo "$somme"."L<br>";

J'ai dans ma table, une valeur de 642,62L, et quand je fais le echo $somme ça m'affiche une valeur de 642 :(

Posté

Quand je vois 170.8 et 642,62 je suis certain que c'est du varchar au lieu du float

Cela doit être soit du float, soit du décimal, et pour mysql le séparateur décimal est le point, donc toutes tes valeurs avec virgules sont a corriger

Posté

Comme type met float(2) ou préfère lui le decimal, quoique non, le decimal est traduit comme du char, donc pas vraiment bon pour les calcul, donc float(2)

Posté

C'est dans taille / valeur, comme pour les varchar

On me dit que le type decimal est au final mieux pour les calculs comme les sommes, sinon, tu risques de te faire chier avec les arrondis du float

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...