requete group by ? - SQL/NoSQL - Programmation
Marsh Posté le 21-07-2005 à 09:04:18
select jour,prix,count(*)
from tatable
group by jour,prix
si ta date contient aussi l'heure :
select left(jour,10),prix,count(*)
from tatable
group by left(jour,10),prix
Marsh Posté le 21-07-2005 à 09:30:09
merci.. j'arrive maintenant à avoir la liste groupée par prix mais quand je met le count(*) j'ai une erreur
comment tu récupéres le count dans la réponse ?
merci
Marsh Posté le 21-07-2005 à 17:20:05
en fait si tu fais count(*) .. comment tu affiches le résult puisque count tappes sur l'ensemble
si je fais :
$result=mysql_query("SELECT prix,date,COUNT(prix) AS cnt FROM basket LEFT JOIN users ON basket.id_user=users.id_user WHERE users.nom!='' GROUP BY basket.px" );
while ($lg=mysql_fetch_object($result))
{
echo"- $lg->prixx - cnt = $lg->cnt<br />";
}
il affiche pas x abo à tel prix tel jour ..
j'ai :
2005-06-15 10:39:06 - 13 - cnt = 601
2005-06-15 10:39:06 - 10 - cnt = 33
2005-06-15 11:03:59 - 26 - cnt = 425
2005-06-17 08:54:02 - 46 - cnt = 18
2005-06-24 18:00:35 - 31 - cnt = 7
Marsh Posté le 21-07-2005 à 19:00:09
nan, count(*) porte sur les tuples spécifiés dans la clause group by
donc tu remets "prix, date" dans ton group by
sinon, je ne sais pas ce qu'a fumé ton SGBD, parceque ta requête telle que tu l'as écrite devrait planter : le GROUP BY doit porter OBLIGATOIREMENT AU MOINS sur la liste des champs ne participant pas à une fonction de regroupement. Dans ton cas, "prix" et "date" doivent obligatoirement être dans la clause group by, c'est la norme SQL qui veut ça.
Bizarre que ton sgbd ne plante pas.
Marsh Posté le 22-07-2005 à 19:07:32
désolé mais je comprends pas si je fais :
COUNT(prix) AS cnt
je le récupère dans la réponse par
while ($lg=mysql_fetch_object($result))
{
echo"- $lg->prix - cnt = $lg->cnt<br />";
}
mais en faisant count(*)
comment récupérer cette valeur puisque t'a pas de AS ..
merci
Marsh Posté le 24-07-2005 à 08:46:34
Citation : |
rassure toi , pour une telle requete son SGBD doit planter
Citation : |
ca c'est deja du php:
Code :
|
Marsh Posté le 24-07-2005 à 18:46:10
ok ... et en le faissant çà me donne vraiment ce que je souhaite, si je fais :
$result=mysql_query("SELECT users.date,basket.prix,COUNT(*) FROM basket LEFT JOIN users ON basket.id_user=users.id_user WHERE users.nom!='' GROUP BY basket.prix,users.date" );
while ($lg=mysql_fetch_row($result))
{
$jour = $lg[0];
$prix = $lg[1];
$cnt = $lg[2];
echo" $jour > $prix - $cnt <br />";
}
j'obtiens :
2005-06-15 10:39:06 > 13 - 1
2005-06-15 11:36:18 > 10 - 3
2005-06-15 12:40:21 > 10 - 1
2005-06-16 10:59:56 > 10 - 1
2005-06-16 11:21:53 > 26 - 1
2005-06-16 11:32:40 > 10 - 1
2005-06-16 11:44:05 > 10 - 2
2005-06-16 14:19:16 > 10 - 2
2005-06-16 14:39:27 > 10 - 1
2005-06-16 14:45:33 > 10 - 1
2005-06-16 14:47:38 > 10 - 1
et ainsi pour chaque enregsitrement ..
alors que je voudrais faire le total par jour et avoir
par ex :
2005-06-16
8 à 26
5 à 13
et ainsi pour chaque jour ..
merci de vos réponses ..
Marsh Posté le 21-07-2005 à 08:35:31
bonjour,
je suis pas encore un dieu en php et coince sur une requete .
en fait dans une table je liste pour chaque jour les ventes d'abonnement pour notre club - y'a trois types de prix possibles
ainsi j'ai comme enregistrement
le jour et le prix
2005-06-16 11:32:40 - 10
2005-06-16 11:41:11 - 26
2005-06-16 11:44:05 - 13
2005-06-16 12:04:21 - 26
2005-06-16 12:40:06 - 13
2005-06-17 15:05:48 - 13
2005-06-17 14:15:51 - 26
et je voudrais faire une requete me permettant d'obtenir comme résultat :
2005-06-16 - 3 abo à 10 > 8 abos à 13 > 6 abos à 26
ainsi pour chaque jour ...
j'essaye avec un group by .. :
$result=mysql_query("SELECT basket.id_bask,basket.ref_seat,basket.prix,users.date FROM basket LEFT JOIN users ON basket.id_user=users.id_user WHERE users.nom!='' GROUP BY basket.prix ORDER BY users.date ASC" );
mais çà marche pas .. le COUNT doit être là aussi je pense mais comment ?
$result=mysql_query("SELECT basket.id_bask,basket.ref_seat,basket.prix,COUNT basket.prix AS ct,users.date FROM basket LEFT JOIN users ON basket.id_user=users.id_user WHERE users.nom!='' GROUP BY basket.prix ORDER BY users.date ASC" );
çà marche pas mieux
si vous avez une idée .. merci de me faire avancer
jhac