SQL查询帮助:根据列的组合获取计数

时间:2014-07-09 21:17:07

标签: mysql sql

我有一个表(变量(无限种类),attr(正好3个不同的属性),日期,状态(只能是1,2或3)):

 ------------------------------------
| Variable | Attr |   Date   | State |
|------------------------------------|
|    V1    |  A1  |01/01/14  |  0    |      
|    V1    |  A1  |01/02/14  |  2    |           
|    V1    |  A1  |01/03/14  |  1    |     
|    V1    |  A1  |01/04/14  |  2    |      
|    V1    |  A2  |01/01/14  |  1    |      
|    V1    |  A2  |01/02/14  |  0    |           
|    V1    |  A2  |01/03/14  |  1    |     
|    V1    |  A2  |01/04/14  |  1    |  
|    V1    |  A3  |01/01/14  |  0    |      
|    V1    |  A3  |01/02/14  |  0    |           
|    V1    |  A3  |01/03/14  |  1    |     
|    V1    |  A3  |01/04/14  |  2    |  
|    V2    |  A1  |01/01/14  |  2    |      
|    V2    |  A1  |01/02/14  |  1    |           
|    V2    |  A1  |01/03/14  |  2    |     
|    V2    |  A1  |01/04/14  |  1    |      
|    V2    |  A2  |01/01/14  |  1    |      
|    V2    |  A2  |01/02/14  |  2    |           
|    V2    |  A2  |01/03/14  |  1    |     
|    V2    |  A2  |01/04/14  |  0    |  
|    V2    |  A3  |01/01/14  |  1    |      
|    V2    |  A3  |01/02/14  |  0    |           
|    V2    |  A3  |01/03/14  |  2    |     
|    V2    |  A3  |01/04/14  |  1    |  
|    V3    |  A1  |01/01/14  |  1    |      
|    V3    |  A1  |01/02/14  |  2    |           
|    V3    |  A1  |01/03/14  |  1    |     
|    V3    |  A1  |01/04/14  |  1    |      
|    V3    |  A2  |01/01/14  |  1    |      
|    V3    |  A2  |01/02/14  |  0    |           
|    V3    |  A2  |01/03/14  |  0    |     
|    V3    |  A2  |01/04/14  |  2    |  
|    V3    |  A3  |01/01/14  |  1    |      
|    V3    |  A3  |01/02/14  |  0    |           
|    V3    |  A3  |01/03/14  |  2    |     
|    V1    |  A3  |01/04/14  |  1    | 
|    .     |  .   |.         |  .    |
|    Vn    |  An  |n         |  n    | 
|----------|------|----------|-------|

我想要的输出(音符计数是此示例的完全随机值):

 ------------------------------------
| Variable | Attr |   Count  | State |
 ------------------------------------
|    V1    |  A1  | 50   |  0    |      
|    V1    |  A1  | 24   |  1    | 
|    V1    |  A1  | 22   |  2    |                
|    V1    |  A2  | 1    |  0    |       
|    V1    |  A2  | 0    |  1    |
|    V1    |  A2  | 15   |  2    |      
|    V1    |  A3  | 68   |  0    |
|    V1    |  A3  | 9    |  1    | 
|    V1    |  A3  | 34   |  2    |       
|    V2    |  A1  | 10   |  0    |               
|    V2    |  A1  | 0    |  1    |
|    V2    |  A1  | 25   |  2    |                   
|    V2    |  A2  | 48   |  0    |     
|    V2    |  A2  | 96   |  1    | 
|    V2    |  A2  | 14   |  2    |             
|    V2    |  A3  | 12   |  0    |     
|    V2    |  A3  | 3    |  1    |
|    V2    |  A3  | 0    |  2    |              
|    V3    |  A1  | 4    |  0    |     
|    V3    |  A1  | 5    |  1    |
|    V3    |  A1  | 8    |  2    |                     
|    V3    |  A2  | 19   |  0    |     
|    V3    |  A2  | 95   |  1    | 
|    V3    |  A2  | 26   |  2    |                   
|    V3    |  A3  | 4    |  0    |     
|    V3    |  A3  | 85   |  1    |
|    V3    |  A3  | 50   |  2    |   
|    .     |  .   |.     |  .    |
|    Vn    |  An  |n     |  n    | 
|----------|------|------|-------|

我要做的第一件事就是选择一个变量+ attr + state组合,我希望我的查询基于top base。所以我要说我选择V2 + A3 + 2.接下来我想去找所有行的日期,其中var = V2,attr = A3,state = 2.接下来我需要仔细检查这些日期并计算所有日期其他var + attr +状态组合。例如,如果V2 + A3 + 2发生在01/01/14,02/06 / 14,02 / 07 / 14,04 / 09/14和05/03/14,它将通过这些上的所有其他变量日期并将每个var + attr +状态组合的出现次数相加。因此输出将对每个var + attr +状态组合进行分组,并显示每个组合的计数。

我尝试了很多不同的东西,比如左连接,内连接

(例如

SELECT variable, attr, count(state), state (SELECT variable, attr, state FROM t1 WHERE variable ='V2' AND Attr ='A3' and state = 2) a INNER JOIN t1 V on key a.date = b.date GROUP BY variable, attr

但无法让它发挥作用。

1 个答案:

答案 0 :(得分:1)

SELECT  m2.variable, m2.attr, m2.state, COUNT(*)
FROM    mytable m1
JOIN    mytable m2
ON      m2.date = m1.date
WHERE   (m1.variable, m1.attr, m1.state) = ('V2', 'A3', 2)
GROUP BY
        m2.variable, m2.attr, m2.state