2012-03-31 10 views
1

タイトルを読む必要があるのはわかりにくいと思いますので、よりよく説明します。 私のデータベースは次のようである:SQLのあるテーブルのフィールドの平均で列を取得する方法

表1 Table1表2 Table2表3 Table3及びこれら...

ユーザーのような他のテーブルは1のようにテキストフィールドに値を挿入し、私は彼らに1が含まれている名前だけが表示されます。私はこの方法でこれを行う:列vの平均によって順序を見つけ

ArrayList<String> found = new ArrayList<String>(); 
ArrayList<String> allTable = getAllTableInDB(); 

for(String table:allTable){ 
    try { 
     ResultSet rs = stat.executeQuery("SELECT * FROM '"+table+"'"); 
     while(rs.next()){ 
      if(!found.contains(rs.getString("name")) && rs.getString("name").equals(WhatUserInserts)) 
       found.add(rs.getString("name")); 
     } 
    } catch (SQLException ex) { 
     ex.printStackTrace(); 
      Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

私が今やりたいことは、この名前の「最高」を計算することである

つのテーブルのために、私は私ができることを知っています。

SELECT name FROM table GROUP BY name ORDER BY AVG(v) DESC 

このテーブルの値の上限については、どうすればできますか?

私はこの方法で解決

だけでなく、私の質問を説明 Dan Pに感謝願っています:

あなたがMaxまたはすべてのテーブルの平均が、これはあなたの名前の最大のV値を取得しますしたいと仮定すると、
ArrayList<String> tables = getAllTableInDB(); 
String query = "SELECT * FROM ("; 
String union = " UNION "; 

for(int i=0;i<tables.size();i++){ 
    query+="SELECT * FROM '"+tables.get(i)+"' WHERE name LIKE '%"+find+"%'"; 
    query = i==tables.size()-1?query:query+union; 
} 

query+=") GROUP BY nome ORDER BY AVG(venduti) DESC"; 
+0

良い質問.. – JackTurky

答えて

2

を。あなたがAVGGでAVGを使用したい場合。私は質問を正確に理解していませんでしたが、私はあなたが望むものと思っています。

SELECT Name, Max(V) 
FROM 
(
    SELECT Name, v 
    FROM TABLE1 
    UNION 
    SELECT Name, v 
    FROM TABLE2 
    UNION 
    SELECT Name, v 
    FROM TABLE3 
) AS AllTables 
GROUP BY Name 
WHERE Name = 'Jon Doe' 

コメントしたところで、パフォーマンスを向上できるかどうかを尋ねました。はい。名前にインデックス/主キーがあると仮定して、各テーブルのwhere句に名前を含めます。このルートに行く場合は、おそらくテーブル値関数を使用するべきです。

DECLARE @Name NVARCHAR(50) 
SET @Name = 'Jon Doe' 

SELECT Name, Max(V) 
FROM 
(
    SELECT Name, v 
    FROM TABLE1 
    WHERE Name = @Name 
    UNION 
    SELECT Name, v 
    FROM TABLE2 
    WHERE Name = @Name 
    UNION 
    SELECT Name, v 
    FROM TABLE3 
    WHERE Name = @Name 
) AS AllTables 
GROUP BY Name 
+0

私は最初に内部のすべての選択にWHERE条件を追加できますか? – JackTurky

+0

私は少し質問を編集するが、これは私が必要なものです..ありがとう!!!!! – JackTurky

+0

編集の参照:my question :) – JackTurky

関連する問題