Java에서 PostgreSQL 데이터베이스 질의하기
Miller Trujillo
Staff Software Engineer
여러 행을 하나의 결과로 요약합니다
COUNT: 행 수
SUM: 숫자 합계AVG: 숫자 평균SELECT COUNT(*) AS total_books,
AVG(publication_year) AS avg_year
FROM books;
|total_books |avg_year |
|--------------|---------|
|14 |1999.14 |
SELECT publication_year, COUNT(*) AS books_written
FROM books
GROUP BY publication_year;
| publication_year | books_written |
| ---------------- | ------------- |
| 2017 | 1 |
| 2003 | 1 |
| 1997 | 1 |
| 2018 | 3 |
| 2014 | 1 |
| 1960 | 1 |
SELECT publication_year, c.name, COUNT(*) AS books_written
FROM books b
LEFT JOIN categories c on c.category_id = b.category_id
GROUP BY publication_year, c.name;
| publication_year | name | books_written |
| ---------------- | ---------------- | ------------- |
| 1951 | Fiction | 1 |
| 1960 | Fiction | 1 |
| 2018 | Computer Science | 3 |
| 1965 | Science Fiction | 1 |
| 2010 | Fantasy | 1 |
| 2003 | Computer Science | 1 |
WHERE: 그룹화 전에 행 필터링HAVING: 집계 후 그룹 필터링SELECT publication_year, COUNT(*) AS books_written
FROM books b
GROUP BY publication_year
HAVING COUNT(*) > 2;
| publication_year | books_written |
| ---------------- | ------------- |
| 2018 | 3 |
String query = """SELECT publication_year, COUNT(*) AS books_written FROM books b GROUP BY publication_year HAVING COUNT(*) > ?;"""; try (PreparedStatement pstmt = conn.prepareStatement(query)) { pstmt.setInt(1, 2); // 책이 2권 초과인 연도만 필터링try (ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { int year = rs.getInt("publication_year"); int count = rs.getInt("books_written"); } } }
| publication_year | books_written |
| ---------------- | ------------- |
| 2018 | 3 |
Java에서 PostgreSQL 데이터베이스 질의하기