SQL与JAVA算法题目解析
一、 SQL题目解析
1. 第一题:查询总分在150分以上的同学
SQL语句:SELECT studentId, SUM(score) as totalscore FROM tb_score GROUP BY studentId HAVING SUM(score) > 150;
该题目要求查询总分在150分以上的同学,结果需要包含studentId和totalscore两列。我们使用GROUP BY语句对studentId进行分组,然后使用HAVING子句对总分进行筛选,最后使用SUM函数计算总分。
2. 第二题:扩展第一题,查询总分在150分以上的同学,并包含学生姓名
SQL语句:SELECT s.studentId, s.name, SUM(t.score) as totalscore FROM tb_score t JOIN tb_student s ON t.studentId = s.studentId GROUP BY t.studentId, s.name HAVING SUM(t.score) > 150;
该题目要求在第一题的基础上,添加学生姓名信息。我们使用JOIN语句连接tb_score表和tb_student表,然后使用GROUP BY语句对studentId和name进行分组,最后使用HAVING子句对总分进行筛选。
二、 JAVA题目解析
1. 第三题:字符串处理
Java方法:public static String processString(String str) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < str.length(); i += 4) {
String temp = str.substring(i, i + 4);
StringBuilder tempBuilder = new StringBuilder(temp);
result.append(tempBuilder.reverse().toString());
}
return result.toString();
}
该题目要求将输入字符串每四个字符输出一次,并将每四个字符左右颠倒。我们使用StringBuilder对象来处理字符串,并使用reverse()方法将每四个字符左右颠倒。
2. 第四题:商品分类算法
Java方法:public List<Goods> getGoodsByTypeKey(String typeKey) {
List<Goods> result = new ArrayList<>();
for (Goods goods : goodsList) {
if (goods.getTypeKey().equals(typeKey) || hasParentTypeKey(goods.getTypeKey(), typeKey)) {
result.add(goods);
}
}
return result;
}
private boolean hasParentTypeKey(String typeKey, String targetTypeKey) {
for (Types types : typesList) {
if (types.getTypeKey().equals(typeKey) && types.getTypePKey().equals(targetTypeKey)) {
return true;
}
}
return false;
}
该题目要求编写一个算法方法,根据typeKey获取所有相关的商品信息。我们使用迭代器遍历商品列表,并使用hasParentTypeKey()方法判断商品的类型是否是目标类型的子级类型,如果是则添加到结果列表中。