亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在不使用聚合函數的情況下刪除 sql 中的重復項

在不使用聚合函數的情況下刪除 sql 中的重復項

眼眸繁星 2022-07-20 20:27:31
我開始學習java,但我的練習有問題。這是整個代碼的片段:import java.io.PrintWriter;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Connection;import java.util.ArrayList;import java.sql.PreparedStatement;private static final int MAX_LINES      = 44;private static final int REPORT_COL1    = 30;   private static final int REPORT_COL     = 15;   private ArrayList<String>   errors      = new ArrayList<String>();private ArrayList<String>   detailReport    = new ArrayList<String>();private ArrayList<String>   summaryReport=  new ArrayList<String>();String firstSortCode= (String) parameters.get("01");if(firstSortCode==null || firstSortCode.trim().equals("")) {    errors.add("Missing required parameter 01");    invalidParameters= true;}else {    for(int i=0; i<SORT_CODES.length; i++) {        if(firstSortCode.equals(SORT_CODES[i][0])) {            pSort1              = SORT_CODES[i][1];            sort1Attr           = SORT_CODES[i][2];            sort1GetDescTable   = SORT_CODES[i][3];            sort1GetDescCode    = SORT_CODES[i][4];            sort1GetDescValue   = SORT_CODES[i][5];            val1 = firstSortCode + " - " + pSort1;            break;        }    }    if(pSort1.equals("")) {        errors.add("Invalid value '"+ firstSortCode + "' for parameter 01");        invalidParameters= true;    }}String mainSelectSQL ="SELECT shrdgmr_pidm, " +  "   shrdgmr_levl_code, "+   "   shrdgmr_grst_code, " "  NVL("+sort1Attr+", 'Not Reported') ";mainSelectSQL =mainSelectSQL +    "FROM shrdgmr " +     "WHERE shrdgmr_pidm is not null " + //Appends the ORDER BY clausemainSelectSQL+= "ORDER BY "+sort1Attr;//Executes the query and obtains the ResultSetResultSet rs= sqlStatement.executeQuery();String sort1Desc= "***";            String Sort1Prev= "*";我的問題是如何合并重復的項目并總結它們的數量?例如,我現在的代碼只是在我的摘要報告中打印以下內容,建筑學 40工程學 56牙科 66建筑學 16計算機科學 10工程學 11建筑學 5輸出應該只是:建筑學 61工程學 67牙科 66計算機科學 10建筑學 5我只是堅持如何做到這一點。我正在考慮使用 hashmap 或 hashset,但我不確定如何。感謝您的幫助,謝謝!
查看完整描述

2 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

如果你真的不想在 sql 中使用聚合,你可以使用HashMap<String, Integer>. 像這樣的東西:


Map<String, Integer> aggResult = new HashMap<>();

while (rs.next()) {

    String name = rs.getString(NAME_INDEX); //NAME_INDEX - name column index

    int value = rs.getInt(VALUE_INDEX); //VALUE_INDEX - value column index


    aggResult.merge(name, value, Integer::sum);


    //if you dont have java8 use this "if":

    /*

    if (aggResult.containsKey(name)) {

        Integer sum = aggResult.get(name);

        aggResult.put(name, sum + value);

    } else {

        aggResult.put(name, value);

    }

    */

}

//test output:

aggResult.forEach((key, value) -> System.out.println(key + ": " + value));

也許您需要TreeMap(有或沒有比較器)來代替HashMap對來自 ResultSet 或其他東西的值的順序、空值檢查。


查看完整回答
反對 回復 2022-07-20
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

必須涉及聚合函數,并且查詢“沒有聚合的聚合”沒有任何魅力

有了這個下面的查詢就可以了。我使用 sum 是因為您的 o/p 實際上看起來不像計數數據,而是已計數記錄的總和

          SELECT NAME, SUM(*)
            FROM TABLE GROUP BY 
            NAME


查看完整回答
反對 回復 2022-07-20
  • 2 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號