2015-06-30 29 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条款,如果你想为一个直方图特定时期。