2010-02-01 5 views
0

MySQL 5.0.45S'il vous plaît aider sur une requête SQL compliquée

Tableau A présente les champs suivants (colonnes): 1. transcation_id
2. CLIENT_NAME
3. item_id
4. ....

Maintenant, j'ai besoin de trouver combien de transactions chaque client a fait l'ordre par le nombre de transactions. Le résultat devrait être comme:

Tom 7 transactions
Jack 5 transactions
Mike 2 transactions

Si un client n'a pas de transactions son nom ne doit pas être int il liste.

Merci d'avance!

+0

Le nombre, c'est-à-dire 7 dans Tom 7 transactions, est le nombre d'entrées dans la table A, ou est-ce un champ dans la table? –

+0

Combien de tables avez-vous? pouvez-vous faire une décharge de celui-ci? – streetparade

Répondre

4

Que diriez-vous:

select client_name, count(*) as transactions 
from TableA 
group by client_name 
order by count(*) DESC 

Si l'on suppose que les clients sans transactions ne sont pas dans le tableau (puisque la table a une colonne de transaction_id) ils ne seront pas dans le résultat.

+0

Fonctionne. Je vous remercie! – lonelyloner

+0

c'est correct, même si je voudrais compter (1) au lieu de compter (*) légèrement meilleure performance, au moins sur Oracle il y a une différence. – Jay

3
Select 
    Client_Name, 
    count(*) as Transactions 
from TableA 
group by Client_Name 
order by count(*) desc 
+0

Cela devrait aussi avoir un 'HAVING COUNT (*)! = 0'. –

+0

@ Shtééf: Merci, en fait, il comptera tout enregistrement existant, en supposant que s'il n'y a pas de transaction, il n'y aura pas d'enregistrement. –

+0

Cela fonctionne également. Merci beaucoup! – lonelyloner

1

Quelque chose comme ça?

Select client_name, count(*) As MyCount 
From YourTableA 
Group By client_name 
Having MyCount > 0 
Order by MyCount Desc 

Édition: grr, trop lent encore! Au moins, j'ai les alias dans ...

Questions connexes