为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JAVA中查询两个数据相似的表并按表字段分组结果?

如何在JAVA中查询两个数据相似的表并按表字段分组结果?

手掌心 2022-09-28 14:46:27
我正在尝试在某个系统中执行分析。系统应该通过查询数据库中的两个或多个表来执行分析,然后显示按字段分组的总结果。这是一个基于 Java 的系统,使用 SQL 作为其数据库。我试图使用联盟,联合所有,但它没有给出令人满意的结果。下表1id    itemID     ItemName     entryTime1      GAR001     PhoneAG       ""2      GAR004     PCLG          ""3      GAR009     ELECT         ""    ...下表2id    itemID     ItemName     entryTime    issuedate1      GAR001     PhoneAG       ""           ""2      GAR001     PhoneAG       ""           ""3      GAR009     ELECT         ""           ""    ...我尝试使用以下public ObservableList<PieChart.Data> getItemAnalysis(){        ObservableList<PieChart.Data> data = FXCollections.observableArrayList();        String st1 = "SELECT itemID, COUNT(itemID) FROM table1 GROUP BY itemID UNION ALL SELECT itemID, COUNT(itemID) FROM table2 GROUP BY itemID";        System.out.println(st1);        ResultSet rs = execQuery(st1);        try{            if(rs.next()){                String itemId = rs.getString("itemID");                int count = rs.getInt(2);                data.add(new PieChart.Data(itemId + "(" + count + ")", count));            }        } catch (SQLException ex) {            Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);        }        return data;    }结果返回时。它返回GAR001(1),GAR004(1),GAR009(1),GAR001(2),GAR009(1).我期望结果返回是GAR001(3)GAR004(1)GAR009(2)
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

您正在两个分组查询之间应用 。相反,您应该使用原始数据,然后对其进行分组:union allunion all


SELECT   itemID, COUNT(*)

FROM     (SELECT itemID

          FROM   table1

          UNION ALL

          SELECT itemID

          FROM   table2) t

GROUP BY itemID


查看完整回答
反对 回复 2022-09-28
?
绝地无双

TA贡献1946条经验 获得超4个赞

您实际上需要编辑SQL语句,这就是您获得这些结果的原因。@Mureinik发布了正确的 SQL。我继续将其插入到您的代码中,以便为您提供一个应该有效的解决方案。


public ObservableList<PieChart.Data> getItemAnalysis(){

        ObservableList<PieChart.Data> data = FXCollections.observableArrayList();


        sql = "SELECT itemID, COUNT(*) FROM (SELECT itemID FROM table1 UNION ALL SELECT itemID FROM table2) t GROUP BY itemID"

        System.out.println(sql);

        ResultSet rs = execQuery(sql);

        try{


            if(rs.next()){

                String itemId = rs.getString("itemID");

                int count = rs.getInt(2);


                data.add(new PieChart.Data(itemId + "(" + count + ")", count));



            }

        } catch (SQLException ex) {

            Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex);

        }

        return data;


    }


查看完整回答
反对 回复 2022-09-28
?
郎朗坤

TA贡献1921条经验 获得超9个赞

您应该使用子查询


SELECT DISTINCT itemID , COUNT(*) AS COUNT 

 FROM (SELECT itemID 

       FROM table1 

       UNION ALL 

       SELECT itemID 

       FROM table2) as T 

 GROUP BY itemID;


查看完整回答
反对 回复 2022-09-28
  • 3 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信