2017-11-29 9 views
1

大きなデータセットに関するSQLとJAVAを使用したアルゴリズムで作業しています。 SQLではすべてのデータを持つテーブルがあり、JAVAにロードする前にできるだけ多くのSQLクエリを使用したいと考えています。複数の列を持つ1つのテーブルの各レコード(整数)のSQLカウントの発生

1から40001までの整数からなるランダムなデータセット(Java)を生成し、それをMySQLテーブルに挿入します。 行は長さが異なることができ、最大30個のアイテム/レコード(これにはIDが含まれます)。だから、通常は列の量は30です(したがってCOL1、COL2、COL3、...... COL30)。この量もある点でランダムになります

私がしたいのは、アイテムをテーブル/データセットに追加し、それらのカウントとともに新しいテーブルに配置します。しかし、これは難しいことです。なぜなら、1つの列だけでなく、テーブル全体で数えたいからです。これはどうすればいいですか?

を(これは私のいつものテーブルと比較して非常に小さいものである)は、例えば、このテーブルを取る:私はこのテーブルから抽出したい何

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でパフォーマンスを向上させる方が良いでしょうか?

ありがとうございます!

答えて

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を使用する必要があります。

+0

うわー、私はちょうど新しいことを学びました。 – cdaiga

+0

これは素晴らしいです、完璧に動作します。私はそれが私のアルゴリズムにとって重要ではないので、列の量を変更できないようにすることを検討しています。動的なクエリは必要ありません。ありがとうございました! – user2840383

関連する問題