0

我需要从 MySQL 中获取以下类型数据的平均值:

有一张表:

表格1

字段_a、字段_b、字段_c

数据_a,数据_a,数据_c
数据_a,数据_b,数据_c
数据_a,数据_a,数据_c

我需要输出的是(这部分不需要在mysql中,只是说明我需要的数据):

field_a 的 100% 是 data_a

field_b 的 33% 是 data_b,66% 是 data_a

field_c 的 100% 是 data_c

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

另外,为标题道歉。我真的想不出更好的方法来解释它。随意编辑一些更简洁的东西。

4

2 回答 2

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)

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

  • 字段值,
  • 表中此类值的数量,
  • 字段名称。
于 2012-09-21T11:50:32.983 回答
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
...

如果您正在寻找动态构建的查询,它可以完成,但事实并非如此。

于 2012-09-21T11:53:59.630 回答