mysql:分别在一个表中分组字段

时间:2012-09-21 10:06:48

标签: mysql group-by

我需要从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中,只是解释我需要的数据):

100%的field_a是data_a

field_b的33%是data_b,66%是data_a

100%的field_c是data_c

我尝试按每个字段进行分组,但是没有给出所需的结果。什么是最好的方法来解决这个问题? (目前我只是设置它来为每个字段运行单独的查询,但是有很多,所以我希望它们在一个大查询中/更高效的东西)。

同样,为标题道歉。我真的想不出更好的解释方法。您可以使用更简洁的内容进行编辑。

2 个答案:

答案 0 :(得分: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)

它将为我们提供包含在每一行中的记录集:

  • 字段值,
  • 表格中的此类值的数量
  • 字段名称。

答案 1 :(得分: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
...

如果您正在寻找动态构建的查询,可以这样做但不是这样。