按组获取行 MySQL Java

Get Rows By Group MySQL Java

我的数据量很大,需要分组处理。 在图像中具有table结构

如何按组检索它们? (首先获取第 1 组,进程。接下来,获取第 2 组,进程......等等。)分组基于应该相等的 pos 列。

我一直在阅读有关对相同 table 进行基本连接的参考资料,但这对我来说是不可能的,因为它 returns 一个非常大的数据集将导致 OutOfMemoryError .

你有两个选择:

  1. 重写你的 sql 以确保你得到更小的结果集并读取垃圾中的整个数据。
  2. 使用 ScrollableResultset。这允许您逐行获取,而无需将整个结果集加载到内存中。

您需要两个游标,一个用于 select 个不同的组,另一个用于分别处理每个组。

 //Assuming you have a Connection conn;
 PreparedStatement groupsPS = 
     conn.prepareStatement("SELECT distinct pos from yourtable");
 ResultSet groupsRS = groupsPS.executeQuery();
 PreparedStatement groupdataPS = 
     conn.prepareStatement("SELECT * from yourtable where pos = ?");
 ResultSet groupdataRS = null;

 while(groupsRS.next())
 {
    groupdataPS.setString(1, groupsRS.getString("pos"));
    groupdataRS = groupdataPS.executeQuery();
    while(groupsRS.next())
    {
      //process your data here
    }
    groupdataRS.close();
 }
 groupsRS.close();
 groupdataPS.close();
 groupsPS.close();

就像@TimeKiller 和@BetaRide 提到的那样,我重组了我的 SQL tables 并为我的 pos[=19= 添加了一个索引 table ] 其频率作为另一列。

使用这个,我可以以 >= 2 的频率遍历每个 pos,获取上面 table 中选定的行 pos,并处理它们。

谢谢!