SQL查询 - 查找所有数据库中项的值

时间:2010-12-04 04:05:34

标签: sql database aggregate-functions

我有这张表:

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  

我需要扫描每个唯一项目的所有数据库,然后计算该项目的每个模糊值除以总事务(此表中为10)的总和

示例:

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

正如您所见,I1存在于交易100,400,500,700,800,900,1000中; 值0.33333333+0.33333333+0.5+0.5+0.25+0.33333333+0.2 除以总交易量,我们得到所需的数量。

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

我该怎么做?

1 个答案:

答案 0 :(得分:1)

使用:

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

如果您需要通过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