0

MySQL から次の種類のデータの平均を取得する必要があります。

1 つのテーブルがあります。

表1

フィールド_a、フィールド_b、フィールド_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% が data_a

field_c の 100% が data_c です

各フィールドでグループ化しようとしましたが、望ましい結果が得られませんでした。これにアプローチする最良の方法は何ですか?(現在、各フィールドに対して個別のクエリを実行するように設定しましたが、かなりの数があるため、1 つの大きなクエリ/もう少し効率的なものにしたいと考えています)。

また、タイトル失礼します。私はそれを説明するためのより良い方法を本当に考えられませんでした。もっと簡潔なもので自由に編集してください。

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
...

If you are looking for a dynamically built query it can be done but this is not it.

于 2012-09-21T11:53:59.630 に答える