Aller au contenu
VansFoxy

Compter les résultat d'une colonne SQL

Noter ce sujet :

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 !

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :(

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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;

:(

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Qu'est-ce-que ça donne si tu essaies la requête dans phpmyadmin ou équivalent?

Jacques.

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :(

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

Ta colonne litres a été enregistrée sous quel type? Float? Varchar? Decimal?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×