[RESOLU]Requête SQL: Afficher Gratuit/Payant en une seule fois

Requête SQL: Afficher Gratuit/Payant en une seule fois [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 01-11-2009 à 14:48:29    

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:

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


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

Code :
  1. JOUR TOTAL
  2. 01 01 3886
  3. 01 02 3346
  4. 01 03 3312
  5. 01 04 3355
  6. 01 05 2999


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

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


 
Résultat:

Code :
  1. JOUR PAYANT
  2. 01 01 3684
  3. 01 02 3114
  4. 01 03 3132
  5. 01 04 3184
  6. 01 05 2776


 
Ce que je souhaite avoir c'est ça:

Code :
  1. JOUR GRATUIT PAYANT TOTAL
  2. 01 01 202 3684 3886
  3. 01 02 232 3114 3346
  4. 01 03 180 3132 3312
  5. 01 04 171 3184 3355
  6. 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 !


Message édité par Sethenssen le 01-11-2009 à 21:55:22
Reply

Marsh Posté le 01-11-2009 à 14:48:29   

Reply

Marsh Posté le 01-11-2009 à 21:53:22    

Résolu par Oishiii
 
La requête:

Code :
  1. SELECT DATE_FORMAT(billing_date, '%m %d') AS jour,
  2.       SUM(IF(price>0, 1, 0)) AS payant,
  3.       SUM(IF(price=0, 1, 0)) AS gratuit,
  4.       Count(*) AS total
  5. FROM table_billing
  6. GROUP BY jour
  7. ORDER BY jour


Donne le résultat suivant:

Code :
  1. jour    payant   gratuit  total
  2. 01 01   2        1        3
  3. 01 02   2        2     4
  4. 01 03   2        0     2
  5. 01 04   0        1     1
  6. 01 05   1        1     2

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed