2015-06-30 104 views
-1

以下是我在表myTable中所具有的值。查找所有列的最常見值

+----------+--------+--------+--------+--------+--------+---------+ 
| date | value1 | value2 | value3 | value4 | value5 | value6 | 
+----------+--------+--------+--------+--------+--------+---------+ 
|2015-05-01| 2 | 10 | 20 | 1 | 40 | 50 | 
|2015-05-02| 5 | 12 | 22 | 32 | 42 | 52 | 
|2015-05-03| 6 | 1 | 24 | 34 | 2 | 5  | 
|2015-05-04| 8 | 16 | 26 | 36 | 46 | 56 | 
|2015-05-05| 1 | 18 | 28 | 38 | 48 | 58 | 
|2015-05-06| 3 | 11 | 1 | 31 | 41 | 51 | 
|2015-05-07| 5 | 13 | 23 | 3 | 43 | 53 | 
|2015-05-08| 9 | 15 | 25 | 35 | 45 | 55 | 
|2015-05-09| 4 | 3 | 27 | 37 | 47 | 3  | 
|2015-05-10| 2 | 19 | 29 | 1 | 49 | 59 | 
+----------+--------+--------+--------+--------+--------+---------+ 

這個輸出,我想得到。但是如何?

+--------------------------------+--------------------------------+ 
|  Output all table   |  Output last 5 days  | 
+--------------------------------+--------------------------------+ 
|  number 1 (5 times)   |  number 1 (3 times)  | 
|  number 3 (4 times)   |  number 2 (2 times)  | 
|  number 2 (3 times)   |  number 5 (2 times)  | 
|  number 5 (3 times)   |        | 
+--------------------------------+--------------------------------+ 

我可以在mysql中實現嗎?

+0

查看'GROUP BY' – RaGe

回答

0

步驟(可能有幫助):

1)確定您想要考慮的所有列以獲得相似的值。
2)創建按列計數值創建一個數組(值=> count,...)
3)一旦創建了所有的數組。合併它們以創建最終陣列。 (加起計數得到最終計數)

0

只有在列名末尾的數字區分表中的列時,通常表示數據結構存在問題。一般來說,你需要每個日期和值的一行,在所謂的聯結表中。

你可以做你想做的由unpivoting的數據,然後綜合這些結果:

select value, count(*) 
from ((select date, value1 as value from mytable) union all 
     (select date, value2 from mytable) union all 
     (select date, value3 from mytable) union all 
     (select date, value4 from mytable) union all 
     (select date, value5 from mytable) union all 
     (select date, value6 from mytable) 
    ) t 
group by value 
order by count(*) desc; 

您可以在任一外部查詢或對所有的子查詢添加where條款,如果你想爲一個直方圖特定時期。