我正在研究一种使用SQL和JAVA的算法,涉及大数据集。 在SQL中我有一个包含所有数据的表,我希望在将它加载到JAVA之前尽可能多地使用SQL查询。
我生成随机数据集(在Java中),仅由1到40001之间的整数组成,然后将它们插入到MySQL表中。 行可以具有不同的长度,最多30个项目/记录(这包括ID)。所以通常列的数量是30(所以COL1,COL2,COL3,...... COL30),但这个数量在某些时候也是随机的
我想要做的是计算表/数据集中每个不同项的出现次数,并将它们放入带有计数的新表中。然而这很棘手,因为我想在整个表中计算它,而不仅仅是一列。我该怎么做?
指定:
以此表为例(与我常用的表相比,这是一个非常小的表):
ID | COL1 | COL2 | COL3 | COL4 | COL5 |
---------------------------------------
1 | 8 | 35 | 42 | 12 | 27 |
2 | 22 | 42 | 35 | 8 | NULL |
3 | 18 | 22 | 8 | NULL | NULL |
4 | 42 | 12 | 27 | 35 | 8 |
5 | 18 | 27 | 12 | 22 | NULL |
我想从这个表中提取的是:
Item | Count
-------------
8 | 3
35 | 3
40 | 1
12 | 3
27 | 3
22 | 3
42 | 2
43 | 1
18 | 2
如果项目有所帮助,那么项目也不能多次出现在同一行中。
任何人都可以帮助我吗?或者它只是不能在SQL中完成?在性能方面,在JAVA中这样做会更好吗?
提前致谢!
答案 0 :(得分:4)
您可以通过取消隐藏数据然后聚合来执行此操作:
select col, count(*)
from (select col1 as col from t union all
select col2 from t union all
. . .
select col30 from t
) t
group by col;
如果您没有已知的列集,则需要使用动态SQL。