주소가 서울인 행들의 국, 영, 수 각각의 평균값을 구하시오 (단, 소수점은 반올림해서 둘째자리 값까지 표현)
우선 SQL문 작성을 먼저 해보자
1)주소가 서울인 행 조회하기
SELECT addr, uname, kor, eng, mat
FROM sungjuk
WHERE addr='Seoul';
2)주소가 서울인 행을 대상으로 국영수 평균 구하기
SELECT avg(kor), avg(eng), avg(mat)
FROM sungjuk
WHERE addr='Seoul';
3)주소가 서울인 행을 대상으로 국영수 평균 구하고 반올림해서 소수점 둘째 자리까지 표현
SELECT round(avg(kor), 2), round(avg(eng), 2), round(avg(mat), 2)
FROM sungjuk
WHERE addr='Seoul';
4)주소가 서울인 행을 대상으로 국영수 평균 구하고 반올림해서 소수점 둘째 자리까지 표현하고, 칼럼명 변경하기
SELECT round(avg(kor), 2) as avg_kor
, round(avg(eng), 2) as avg_eng
, round(avg(mat), 2) as avg_mat
FROM sungjuk
WHERE addr='Seoul';
이 SQL문을 바탕으로 코드를 작성해보자
package jdbc0922;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Test04_selectAvg {
public static void main(String[] args) {
// 문제) 주소가 서울인 행들의 국영수 평균값을 구하시오
// (단, 소수점은 반올림해서 둘째자리값까지 표현)
String addr="Seoul";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "system";
String password = "1234";
String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
System.out.println("오라클 DB 서버 연결 성공!!");
StringBuilder sql = new StringBuilder();
sql.append(" SELECT round(avg(kor), 2) as avg_kor\r\n"
+ " , round(avg(eng), 2) as avg_eng\r\n"
+ " , round(avg(mat), 2) as avg_mat ");
sql.append(" FROM sungjuk ");
sql.append(" WHERE addr=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, addr);
rs = pstmt.executeQuery();
if(rs.next()) {
System.out.println("자료있음~~");
//1)칼럼순서 접근
System.out.printf("국어평균:%.2f\n", rs.getDouble(1));
System.out.printf("영어평균:%.2f\n", rs.getDouble(2));
System.out.printf("수학평균:%.2f\n", rs.getDouble(3));
//2)칼럼명 접근
System.out.printf("국어평균:%.2f\n", rs.getDouble("avg_kor"));
System.out.printf("영어평균:%.2f\n", rs.getDouble("avg_eng"));
System.out.printf("수학평균:%.2f\n", rs.getDouble("avg_mat"));
} else {
System.out.println("자료없음!!");
}//if end
} catch (Exception e) {
System.out.println("오라클 DB 연결 실패 : " + e);
} finally { //자원반납(순서주의)
try {
if(rs!=null) {rs.close();}
} catch (Exception e) {}
try {
if(pstmt!=null) {pstmt.close();}
} catch (Exception e) {}
try {
if(con!=null) {con.close();}
} catch (Exception e) {}
}//end
System.out.println("END");
}//main() end
}//class end
'웹개발 교육 > Java' 카테고리의 다른 글
[40일] JDBC (13) - 연습 문제 (0) | 2022.09.22 |
---|---|
[40일] JDBC (12) - Like를 이용한 행 조회 (0) | 2022.09.22 |
[40일] JDBC (10) - 전체 행 조회 (0) | 2022.09.22 |
[40일] JDBC (9) - 한 행 조회 (0) | 2022.09.22 |
[40일] JDBC (8) - 테이블의 행의 갯수 (0) | 2022.09.22 |