2010-05-02 11 views
3

Ce que j'essaie d'obtenir est un rapport sur les transactions financières quotidiennes. Avec ma requête SQL, je voudrais compter le nombre total de transactions en espèces, la valeur totale en espèces et la même chose pour les chèques. Je veux seulement le faire pour une date précise.Champs de compte/somme MySQL

Voici un extrait de la requête avec laquelle j'ai des problèmes. Ces commandes sum et count traitent toutes les données de la table et non la date sélectionnée. Désolé, si je n'ai pas publié assez de détails, car je n'ai pas le temps. Si vous avez besoin de plus d'informations il suffit de demander ..

Cheers.

MISE À JOUR: J'ai posté un peu plus d'informations sur la mise en page et les résultats que je reçois ici: www.conorhackett.com/sql/transaction.html

Le problème est que lorsque je me joins au payment_table (donc je peux spécifier payment_type_name au lieu d'id) Il compte toutes les transactions pour l'argent/chèque. La limitation de date semble disparaître.

Toute aide appréciée.

+0

"et non pour la date sélectionnée" ... quelle date sélectionnée? – aioobe

+0

Où se trouve la partie 'WHERE transactionDate =' 2010-04-10 'de votre requête? Je m'attendrais à quelque chose comme 'payment_type.name = ... ET transactionDate = ...' – extraneon

+0

Je ne suis pas sûr que mysql le fasse, mais dans Oracle pour additionner tous les jours, vous pouvez faire une partition de somme (X) transactionDate – dangerstat

Répondre

3

Pas besoin de sous-requêtes corrélées, il suffit d'utiliser group by

select 
t.payment_type_id as type_id 
,sum(t.amount) as total_cash 
,count(*) as total_cash_transactions 
from TRANSACTION t 
where t.date = '2010-05-01' 
group by t.payment_type_id 

Vous pouvez ensuite rejoindre le résultat avec payment_type si vous avez besoin pour obtenir les noms de type à partir de là.