2012-09-21 76 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 
... 

如果你正在尋找一個動態生成的查詢是可以做到的,但這不是它。

相關問題