2010-05-25 3 views
1

Dites que vous avez une table utilisateur et une table de commandes qui référence l'utilisateur (l'utilisateur a beaucoup de commandes) et contient un champ de nombre d'articles.Nombre de Sums utilisant éventuellement group_by

Comment pouvez-vous demander efficacement "combien d'utilisations ont commandé combien d'articles?"

C'est, pour produire quelque chose le long des lignes de:

Number of users | sum of items 
------------------------------- 
5 users   | 1 item 
4 users   | 5 items 
1 user   | 7 items 

Merci à l'avance.

+0

tables de commande ne contiennent généralement pas des informations d'objet. C'est généralement dans une table orderDetails, qui a OrderId, ItemNumber (ItemId) unitPrice, et ItemCount ... ou quelque chose de similaire. Êtes-vous sûr de ne pas parler d'une table OrderDetails? –

+0

Le problème réel implique un enregistrement d'installation avec un compte de connexion et un utilisateur peut avoir de nombreuses installations d'une application iPhone. Il est apparu sous la forme d'utilisateurs et de commandes parce que c'est juste une façon commune de visualiser le cœur du problème. –

Répondre

1

Vous devez utiliser une table dérivée:

SELECT COUNT(*) AS `Number of Users`, `Sum of Items` 
FROM (
    SELECT u.UserID, SUM(ItemCount) AS `Sum of Items` 
    FROM User u 
    INNER JOIN Order o ON u.UserID = o.UserID 
    GROUP BY u.UserID 
) g 
GROUP BY `Sum of Items` 
+0

Parfait, c'était exactement ce que je cherchais. –

+1

Ici, la table Utilisateur est inutile. – msi77

+0

@ msi77: Oui, c'est vrai! –

Questions connexes