2012-09-21 38 views
0

我需要得到以下类型的数据的平均数的MySQL:mysql的:在一个表中分组字段分别

有一个表:

表1

 
field_a, field_b, field_c 

data_a , data_a , data_c 
data_a , data_b , data_c 
data_a , data_a , data_c 

什么我需要输出的是(这部分不需要在mysql中,只是解释我需要的数据):

field_a的100%是data_a

field_b的

33%是DATA_B和66%是的field_c DATA_A

100%是DATA_C

我试图通过每个字段分组,但它没有得到所需要的结果。什么是最好的方法来解决这个问题? (目前我只是设置它为每个字段运行单独的查询,但有很多,所以我希望他们在一个大的查询/更有效一点)。

也,为标题道歉。我无法想出更好的解释方法。随意编辑更简洁的内容。

回答

2

我只能想到UNION使用:

(SELECT field_a AS val, COUNT(field_a) AS cnt, 'A' AS fld_name 
    FROM table1 GROUP BY field_a) 
UNION 
(SELECT field_b AS val, COUNT(field_b) AS cnt, 'B' AS fld_name 
    FROM table1 GROUP BY field_b) 
UNION 
(SELECT field_c AS val, COUNT(field_c) AS cnt, 'C' AS fld_name 
    FROM table1 GROUP BY field_c) 

它会给我们包含每个行的记录集:

  • 字段值,
  • 表这样的值数,
  • 字段名称。
0
select 'field a', fa, cfa * 100.0/total 
from (
     select 
      fa, count(fa) as cfa 
     from t 
     group by fa 
    ) t 
    inner join (
     select count(*) as total 
     from t 
    ) s on 1 = 1 

union 

select 'field b', fb, cfb * 100.0/total 
from (
     select 
      fb, count(fb) as cfb 
     from t 
     group by fb 
    ) t 
    inner join (
     select count(*) as total 
     from t 
    ) s on 1 = 1 

union 
... 

如果你正在寻找一个动态生成的查询是可以做到的,但这不是它。

相关问题