2016-12-23 6 views
0

結果セットから最小カウント、最大カウントおよび合計結果セットカウントを取得する必要があります。クエリを実行した後、複数の行が生成され、そのデータを抽出する必要があります。 例えばクエリ:結果セットからの最小カウント、最大カウントおよび合計結果セットカウントの取得方法

if (overallTotalClassRow.next()) { 
    maxclassaverage = overallTotalClassRow.getInt(1); 
} 

しかし、これは最大値を与える:

SELECT count(*) AS `countTotal`,`admission_no`,`course` FROM `attendance` WHERE `course` = '15' AND `timestamp` AND `admission_no` !='0' AND `timestamp` BETWEEN '2016-04-01 00:00:00.0' AND '2017-03-31 00:00:00.0' GROUP BY `admission_no` ORDER BY `countTotal` DESC 

OUTは、私はこれを試してみました

countTotal admission_no course 
4   2304    15 
4   2442    15 
3   2777    15 
2   2967    15 
2   3288    15 

を置きます。すなわち4.

私は4と2を最大値と最小値として取得し、合計を5とする必要があります。どのようにすればいいですか。

+0

'タイムスタンプ' は常にtrueになります。 http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry

+0

@Strawberryたぶん彼はタイムスタンプがヌルでないことをチェックしています。 – JonahCui

答えて

2

お試しください。

 select min(countTotal) as MinCount ,max(countTotal) as MaxCount, 
     count(*) as totalCount from 
     (SELECT count(*) AS `countTotal`,`admission_no`,`course` 
     FROM `attendance` WHERE `course` = '15' AND `timestamp` 
     AND `admission_no` !='0' AND `timestamp` 
     BETWEEN '2016-04-01 00:00:00.0' AND '2017-03-31 00:00:00.0' 
     GROUP BY `admission_no` 
     )a 

、その後、私は最も簡単な方法があると思い

+2

エラーが表示されています:すべての派生テーブルには独自のエイリアスが必要です –

+2

うわー!!それは魅力のように働いた.. javaよりも最も簡単な方法..ありがとうたくさん –

+1

大歓迎@KarthikCP –

1

のJavaアプローチ: -

1)は、ArrayListの
2にcountTotalを入れて)最大値と最小値を見つけるために、コレクションクラスの最大と最小のメソッドを使用します。 例: -

Comparator<String> comparator = new Comparator<String>() { 
     @Override 
     public int compare(String o1, String o2) { 
      return Integer.valueOf(o1).compareTo(Integer.valueOf(o2)); 
     } 
    }; 
int max=Collections.max(list, comparator); 

3)ArrayList.size()総数を見つけます。

SQLアプローチ: -

最大、最小と労働組合の総カウントクエリを使用してください。

1

を使用します。

int maximum = 0; 
int minimum =0; 
int totalCount =0; 

if (overallTotalClassRow.next()) { 
    totalCount +=1; 
    if(totalCount ==1) { 
     maximum = overallTotalClassRow.getInt(1); 
     minimum = overallTotalClassRow.getInt(1); 
    } 
    if (overallTotalClassRow.getInt(1)> maximum) { 
     maximum = overallTotalClassRow.getInt(1); 
    } 
    if (overallTotalClassRow.getInt(1)< maximum) { 
     minimum = overallTotalClassRow.getInt(1); 
    } 
} 
関連する問題