2011-03-05 3 views
0

Je rencontre des problèmes pour SUM la colonne bytes en utilisant distinct sur messageid. Sur la base de la table d'exemple que je dois obtenir le résultat suivant:Mysql distinct avec somme

user1 10 (je dois utiliser SUBSTRING_INDEX pour supprimer le domaine de l'utilisateur)
utilisateur2 10

Mais tous mes tests, le nombre de octets pour [email protected] est résumée

user1
user2 10

username   messageid            bytes 
[email protected] [email protected] 10 
[email protected] [email protected] 10 
[email protected] [email protected] 5  
[email protected] [email protected] 5 

Une idée?

Merci d'avance pour votre temps et votre aide.
Cheers,
Marcello

+3

s'il vous plaît poster la requête que vous utilisez, distinct devrait travailler avec somme – Orbit

+1

c'est normal que vous obtenez 20, pourquoi devriez-vous obtenir 10? –

+0

@stunaz Je suppose * que lorsqu'il y a plus d'une ligne avec le même identifiant de message, une seule doit contribuer au total de l'utilisateur, c'est-à-dire que la table est dénormalisée. Ce qui semble bizarre - vous penseriez que la table pourrait juste être nettoyée des lignes identiques et donné un index unique sur (nom d'utilisateur, messageid) ... – tgdavies

Répondre

6

Vos données ont des doublons que vous devez vous débarrasser. Vous pouvez utiliser la requête ci-dessous - il a un select interne qui se débarrasse des doublons, puis il résume tous les octets en fonction de l'utilisateur.

Je ne suis pas allé dans la question de la sous-chaîne que je suppose que vous manipulaient déjà (commentaire si vous me voulez l'ajouter ...)

SELECT 
    t.username, SUM(t.bytes) 
FROM 
(SELECT username, messageid, bytes 
    FROM my_table 
    GROUP BY username, messageid) as t 
GROUP BY t.username 
+0

Merci. Travaillé très bien. – Marcello