{MySQL} Afficher Gratuit/Payant en 1 fois

Résolu/Fermé
Sethenssen Messages postés 3 Date d'inscription dimanche 6 juillet 2008 Statut Membre Dernière intervention 10 novembre 2009 - 1 nov. 2009 à 13:47
Sethenssen Messages postés 3 Date d'inscription dimanche 6 juillet 2008 Statut Membre Dernière intervention 10 novembre 2009 - 1 nov. 2009 à 21:52
Bonjour,

Tout d'abord j'utilise:
Toad for MySQL v.4.1.0.220
MySQL v.5.1

J'ai une table composée de client qui effectuent des transactions payantes ou gratuites.
Je voudrais afficher en une seule commande le nombre d'achat gratuit, payant et le total.
Actuellement j'arrive à mon résultat mais sur 3 requêtes distinctes.

Exemple de ma requête:

SELECT concat(substr(billing_date,6,2),' ',substr(billing_date,9,2)) AS JOUR,count(client_id) AS "TOTAL"
FROM table_billing
WHERE billing_date BETWEEN "2009-01-01" AND "2009-01-06"
GROUP BY JOUR;

En deux mots je concatene la date pour ressortir le mois suivi du jour puis le résultat.

Résultat:
JOUR TOTAL
01 01 3886
01 02 3346
01 03 3312
01 04 3355
01 05 2999

En ajoutant une condition sur le prix j'arrive à resortir uniquement les payants:

SELECT concat(substr(billing_date,6,2),' ',substr(billing_date,9,2)) AS JOUR,count(client_id) AS "TOTAL"
FROM table_billing
WHERE billing_date BETWEEN "2009-01-01" AND "2009-01-06"
AND price <> "0"
GROUP BY JOUR;

Résultat:
JOUR PAYANT
01 01 3684
01 02 3114
01 03 3132
01 04 3184
01 05 2776

Ce que je souhaite avoir c'est ça:
JOUR GRATUIT PAYANT TOTAL
01 01 202 3684 3886
01 02 232 3114 3346
01 03 180 3132 3312
01 04 171 3184 3355
01 05 223 2776 2999

J'ai essayé avec des case mais sans succès, je n'arrive jamais à avoir la bonne syntaxe

Merci pour votre aide future !
A voir également:

1 réponse

Sethenssen Messages postés 3 Date d'inscription dimanche 6 juillet 2008 Statut Membre Dernière intervention 10 novembre 2009
1 nov. 2009 à 21:52
Résolu par Oishiii

La requête:
[CODE=SQL]
SELECT DATE_FORMAT(billing_date, '%m %d') AS jour,
SUM(IF(price>0, 1, 0)) AS payant,
SUM(IF(price=0, 1, 0)) AS gratuit,
Count(*) AS total
FROM table_billing
GROUP BY jour
ORDER BY jour[/CODE]
Donne le résultat suivant:
[code]
jour payant gratuit total
01 01 2 1 3
01 02 2 2 4
01 03 2 0 2
01 04 0 1 1
01 05 1 1 2
[/code]
0