编写与使用内部联接和group by子句的sql select查询等效的java算法

卡迪亚(Aditya Khajuria)

需要编写等效于以下sql查询的java代码(算法)-

选择u。浏览器,a.app_name,count(*) 
作为用户的no_of_apps和内部加入应用程序a 
其中u.user_id =由u.browsers组的a.user_id组,由no_of_apps限制的a.app_name顺序限制为0.2。

有两个不同的.tsv文件(user.tsv和app.tsv),它们包含的数据格式为-

+ 1.users.tsv

user_id浏览器

1个Mozilla
2 Mozilla
3铬

+2。apps.tsv

app_id user_id app_name

1 1 HelloWorld
2 3声纳
3 1声纳
4 2 HelloWorld
5 1 HelloWorld

在此,user_id的行为类似于apps.tsv文件中的外键。我真正需要的是java中从两个文件中获取数据的算法,如下所示:

浏览器app_name no_of_apps

Mozilla HelloWorld 3
Mozilla声纳1  
铬声纳1 

我为此编写的代码是-

import java.util.*;
import java.util.Map.*;
import java.util.HashMap;
import java.io.*;
import java.nio.file.*;

public class Task1 {
    public static void main(String... args) {
        //cloumn places
        int state_col = 2;
        int user_col = 0;
        int jobid_col = 2;
        List<String> userLines = null;
        List<String> appLines = null;
        String[][] userResultArray = null;
        String[][] appResultArray = null;

        Map<String, String> userMap = new HashMap<String,String>();
        Map<String, String> appMap = new HashMap<String, String>();
        Map<String, String> userJobMap = new HashMap<String,String>();
        List<Integer> app = new ArrayList<Integer>();
        try {
            userLines = Files.readAllLines(Paths.get("/home/indg/java-spring/spring/idea_workspace/Task1/tabFiles/users.tsv"));
            appLines = Files.readAllLines(Paths.get("/home/indg/java-spring/spring/idea_workspace/Task1/tabFiles/apps.tsv"));
        } catch(Exception ex) {
            ex.printStackTrace();
        }



        if(userLines != null) {
            userResultArray = new String[userLines.size()][];

            for(int i =0; i<userLines.size()-1; i++){
                userResultArray[i] = userLines.get(i).split("\t"); //tab-separated
                if(userResultArray[i][state_col] != "" && userResultArray[i][state_col] != null) {
                    userMap.put(userResultArray[i][user_col],userResultArray[i][state_col]);
               }

            }
        } else {
            System.out.println("Error in reading line");
        }

        if(appLines != null) {
            appResultArray = new String[appLines.size()][];

            for(int i =0; i<appLines.size()-1; i++){
                appResultArray[i] = appLines.get(i).split("\t"); //tab-separated
                if(appResultArray[i][jobid_col] != "" && appResultArray[i][jobid_col] != null) {
                    appMap.put(appResultArray[i][user_col], appResultArray[i][jobid_col]);
                }

            }
        } else {
            System.out.println("Error in reading line");
        }

        for(String userKey: userMap.keySet()) {
            //System.out.println(userEntry.getKey() + "**");
            String jobId = appMap.get(userKey);
            if(jobId != null && userMap.get(userKey) != null && userMap.get(userKey) != "" ) {

                userJobMap.put(userMap.get(userKey), jobId);
            }

        }

        System.out.println(userJobMap + " --");

    }   
}

我也想例如在查询中应用order by和limit-by by no_of_apps limit 0,2如何在代码中做到这一点

多同步
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Task1 {
    public static void main(String... args) {
        List<String> userLines = Arrays.asList(new String[] { "1\tMozilla", "2\tMozilla", "3\tChrome" });
        List<String> appLines = Arrays
                .asList(new String[] { "1\t1\tHelloWorld", "2\t3\tSonar", "3\t1\tSonar", "4\t2\tHelloWorld", "5\t1\tHelloWorld" });

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

        if (userLines != null) {
            for (int i = 0; i < userLines.size(); i++) {
                String[] userResultArray = userLines.get(i).split("\t"); // tab-separated
                userMap.put(userResultArray[0], userResultArray[1]);
            }
        } else {
            System.out.println("Error in reading line");
        }

        if (appLines != null) {
            for (int i = 0; i < appLines.size(); i++) {
                String[] appResultArray = appLines.get(i).split("\t"); // tab-separated
                if (userMap.containsKey(appResultArray[1])) {
                    String userName = userMap.get(appResultArray[1]);
                    if (resultMap.containsKey(userName)) {
                        Map<String, Integer> map = resultMap.get(userName);
                        Integer n = map.get(appResultArray[2]) == null ? 0 : map.get(appResultArray[2]);
                        map.put(appResultArray[2], ++n);
                    } else {
                        Map<String, Integer> map = new HashMap<String, Integer>();
                        map.put(appResultArray[2], 1);
                        resultMap.put(userName, map);
                    }
                }
            }
        } else {
            System.out.println("Error in reading line");
        }

        // sort
        Map<Integer, List<String>> sortedMap = new TreeMap<Integer, List<String>>();
        for (String userName : resultMap.keySet()) {
            for (String app : resultMap.get(userName).keySet()) {
                Integer n = resultMap.get(userName).get(app);
                List<String> list = sortedMap.get(n) == null ? new ArrayList<String>() : sortedMap.get(n);
                list.add(userName + "\t" + app);
                sortedMap.put(n, list);
            }
        }

        int limit = 0;

        outer:
        for (Integer n : sortedMap.keySet()) {
            for (String s : sortedMap.get(n)) {
                System.out.print(s);
                System.out.println("\t" + n);
                if (++limit == 2) break outer;
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

联接查询等效于Not IN子句(SQL Server 2008)

来自分类Dev

SQL查询使用组子句

来自分类Dev

使用 WHERE IN 子句的 SQL 查询

来自分类Dev

使用 With 子句的相关 SQL 查询

来自分类Dev

Where子句和内部联接语法查询

来自分类Dev

SQL查询:On子句和where子句的条件差异

来自分类Dev

SQL Group By子句如何划分查询结果

来自分类Dev

SQL查询不检查之后和子句

来自分类Dev

SQL查询不检查之后和子句

来自分类Dev

SQL Update查询和Where子句

来自分类Dev

使用子查询和分组的Nhibernate内部联接的SQL

来自分类Dev

在SQL查询的'WHERE'子句中的'SELECT'中使用'IF'的结果

来自分类Dev

SQL查询:在WHERE子句中使用AND / OR

来自分类Dev

使用参数为IN子句的SQL Server查询

来自分类Dev

使用参数为IN子句的SQL Server查询

来自分类Dev

使用多个where子句的SQL Server查询

来自分类Dev

使用 where 子句透视 sql 查询

来自分类Dev

SQL内部联接的where子句

来自分类Dev

如何执行此SQL查询(聚集group by和where in子句)?

来自分类Dev

如何在 linq 或 lambda 中使用 join 和 where 子句编写 sql 查询

来自分类Dev

在SQL查询中使用带有Union子句的group / order by

来自分类Dev

如何为这个问题在sql中使用内部联接编写不相关的查询?

来自分类Dev

编写linq similiar,在其中使用SQL查询中的内部联接从中进行选择

来自分类Dev

BigQuery SQL:在GROUP BY子句中使用时,SELECT别名是否优先于FROM子句的列名?

来自分类Dev

内部联接查询与内部联接..on和where子句查询之间的区别?

来自分类Dev

内部联接查询与内部联接..on和where子句查询之间的区别?

来自分类Dev

使用 WHERE 子句和 CONVERT 或 CAST 的 T-SQL 查询

来自分类Dev

在 where 子句中使用自联接和 group bys 优化查询

来自分类Dev

SQL查询-Count()和内部联接

Related 相关文章

  1. 1

    联接查询等效于Not IN子句(SQL Server 2008)

  2. 2

    SQL查询使用组子句

  3. 3

    使用 WHERE IN 子句的 SQL 查询

  4. 4

    使用 With 子句的相关 SQL 查询

  5. 5

    Where子句和内部联接语法查询

  6. 6

    SQL查询:On子句和where子句的条件差异

  7. 7

    SQL Group By子句如何划分查询结果

  8. 8

    SQL查询不检查之后和子句

  9. 9

    SQL查询不检查之后和子句

  10. 10

    SQL Update查询和Where子句

  11. 11

    使用子查询和分组的Nhibernate内部联接的SQL

  12. 12

    在SQL查询的'WHERE'子句中的'SELECT'中使用'IF'的结果

  13. 13

    SQL查询:在WHERE子句中使用AND / OR

  14. 14

    使用参数为IN子句的SQL Server查询

  15. 15

    使用参数为IN子句的SQL Server查询

  16. 16

    使用多个where子句的SQL Server查询

  17. 17

    使用 where 子句透视 sql 查询

  18. 18

    SQL内部联接的where子句

  19. 19

    如何执行此SQL查询(聚集group by和where in子句)?

  20. 20

    如何在 linq 或 lambda 中使用 join 和 where 子句编写 sql 查询

  21. 21

    在SQL查询中使用带有Union子句的group / order by

  22. 22

    如何为这个问题在sql中使用内部联接编写不相关的查询?

  23. 23

    编写linq similiar,在其中使用SQL查询中的内部联接从中进行选择

  24. 24

    BigQuery SQL:在GROUP BY子句中使用时,SELECT别名是否优先于FROM子句的列名?

  25. 25

    内部联接查询与内部联接..on和where子句查询之间的区别?

  26. 26

    内部联接查询与内部联接..on和where子句查询之间的区别?

  27. 27

    使用 WHERE 子句和 CONVERT 或 CAST 的 T-SQL 查询

  28. 28

    在 where 子句中使用自联接和 group bys 优化查询

  29. 29

    SQL查询-Count()和内部联接

热门标签

归档