我想通過串聯字符串來獲取有關製作聚合數據的意見。如果我有一個列聚合,但我想在一個聚合列中進行連接,而這在性能方面更快?做一個SQL,然後在CODE中彙總。或者選擇主要數據,然後每次查詢一個數據。在SQL或CODE(性能方面)中更好地分組聚合的數據
例如:
TABLE_A
COL_A_1 COL_A_2
A a
B b
C c
TABLE_B
COL_B_1 COL_B_2
a Text1
a Text2
a Text3
b Text4
b Text5
表在COL_A_2 = COL_B_1接合,所述聚集體列是COL_B_2。
選項1(做一個SQL)
SELECT TABLE_1.COL_A_1, TABLE_1.COL_A_2, TABLE_2.COL_B_2
FROM TABLE_A
LEFT OUTER JOIN TABLE_B ON TABLE_A.COL_A_2 = TABLE_2.COL_B_1
ORDER BY TABLE_1.COL_A_1
然後在的代碼,對結果只是循環設定和聚集COL_B_1。 (例如使用Java)
String oldColA1 = "";
InfoEntity currInfo = null;
for (InfoEntity info : infoList) {
if (!oldColA1.equals(info.colA1)) {
currInfo = info;
}
if (currInfo.colB2 == null || currInfo.colB2.equals("")) {
currInfo.colB2 = info.colB2;
} else {
currInfo.colB2 += info.colB2;
}
oldColA1 = info.colA1;
}
選項2(做幾個SQL)
SELECT TABLE_1.COL_A_1, TABLE_1.COL_A_2
FROM TABLE_A
ORDER BY TABLE_1.COL_A_1
然後對於每個代碼選擇(防爆的Java)
for (InfoEntity info : infoList) {
// Select TableB entity based on info.colA2
...
tableBList = dao.selectTableB(info.colA2);
...
for (TableBEntity b : tableBList) {
info.colB2 += b.colB2;
}
}
我通常選擇1 ,因爲我認爲選擇多個SQL可能代價很高。但我不確定這一點。但是有沒有另外一種方法來進行這種聚合。我已經搜索了網絡,並且在標準SQL中沒有字符串連接聚合。另外,TableA上的插圖已經過於簡化了,通常TableA是一個連接在一起的多個表的複雜查詢,TableB也是如此。