2010-12-04 48 views
1

J'ai ce tableau:requêtes SQL - trouver de la valeur de l'élément de toute base de données

Trans_ID Name Fuzzy_Value Total_Item 
100   I1 0.33333333  3 
100   I2 0.33333333  3 
100   I5 0.33333333  3 
200   I2 0.5    2 
200   I5 0.5    2 
300   I2 0.5    2 
300   I3 0.5    2 
400   I1 0.33333333  3 
400   I2 0.33333333  3 
400   I4 0.33333333  3 
500   I1 0.5    2 
500   I3 0.5    2 
600   I2 0.5    2 
600   I3 0.5    2 
700   I1 0.5    2 
700   I3 0.5    2 
800   I1 0.25    4 
800   I2 0.25    4 
800   I3 0.25    4 
800   I5 0.25    4 
900   I1 0.33333333  3 
900   I2 0.33333333  3 
900   I3 0.33333333  3 
1000   I1 0.2    5 
1000   I2 0.2    5 
1000   I4 0.2    5 
1000   I6 0.2    5 
1000   I8 0.2    5 

Je dois analyser toutes les bases de données pour chaque élément unique, puis de compter la somme de chaque valeur floue pour cet élément divisé par transaction totale (qui est 10 dans ce tableau)

Exemple:

I1 = Sum of (Fuzzy_Value from item I1 in trans 100 until 1000) 
    -> (0.33333333+0.33333333+0.5+0.5+0.25+0.33333333+0.2)/10 = 0.244999999 

comme vous pouvez le voir I1 existe dans la transaction 100,400,500,700,800,900,1000;
avec la valeur de 0.33333333+0.33333333+0.5+0.5+0.25+0.33333333+0.2 diviser par transaction totale, nous obtenons le nombre nécessaire.

ITEM_SET   Support 
{I1}    0.244999999 
{I2}    0.274999999  
{I3}    0.258333333  
{I4}    0.103333333 

Comment faire?

Répondre

1

Utilisation:

SELECT t.name AS item_set, 
     SUM(t.fuzzy_value)/COUNT(*) AS support 
    FROM TRANS t 
GROUP BY t.name 

Si vous devez limiter par trans_id:

SELECT t.name AS item_set, 
     SUM(t.fuzzy_value)/COUNT(*) AS support 
    FROM TRANS t 
    WHERE t.trans_id BETWEEN 100 AND 1000 
GROUP BY t.name 
+0

fonctionne parfaitement THX: D – Rico

+0

mais je pense que vous oubliez d'ajouter divisé par X dans cette fonction :(i modifié un peu: Sum (t.Fuzzy_Value)/count (*) J'espère que c'est correct – Rico