我需要从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
我尝试按每个字段进行分组,但是没有给出所需的结果。什么是最好的方法来解决这个问题? (目前我只是设置它来为每个字段运行单独的查询,但是有很多,所以我希望它们在一个大查询中/更高效的东西)。
同样,为标题道歉。我真的想不出更好的解释方法。您可以使用更简洁的内容进行编辑。
答案 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
...
如果您正在寻找动态构建的查询,可以这样做但不是这样。