SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명 : AVERAGE_DURATION
) 리스트를 출력하는 SQL문을 작성하는 문제였다.
평균 대여 기간은 소수점 두 번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬하고,
평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬한다.
이 글의 코드와 정보들은 [실전! 스프링 부트와 JPA 활용 1] 강의를 들으며 정리한 내용을 토대로 작성하였습니다..
이 글의 코드와 정보들은 [실전! 스프링 부트와 JPA 활용 1] 강의를 들으며 정리한 내용을 토대로 작성하였습니다.
H2
DB를 사용하는 이유 : 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공하기 때문.
[1] H2 데이터베이스 1.4.199 다운로드를 받은 후, 압축을 푼다. (압축푼 폴더명 : h2)
[2] 터미널을 열고 해당 폴더(h2) -> bin으로 이동한다.(cd bin) -> ll
로 h2.sh가 있는지 확인한다.
[3] cat h2.sh
-> java 언어이기 때문에 java 언어로 미리 다운받아있어야 한다.
사전에 brew + java11이 설치되어 있어야 한다.
[3-1] adoptopenjdk/openjdk 추가 : brew tap adoptopenjdk/openjdk
[3-2] 설치 가능한 모든 JDK 찾기 : brew search jdk
[3-3] java 11버전 설치 : brew install --cask adoptopenjdk11
[3-4] 자바가 설치된 곳 확인 : /usr/libexec/java_home -V
[3-5] 자바 버전 확인 : java --version
[4] 실행 : ./h2
-> [5], [6]
만약 -bash: ./h2.sh: Permission denied
문제가 발생하는 경우, chmod 755 h2.sh
입력후 엔터친 다음에 다시 ./h2.sh
를 입력한다.
cf) 실행 취소 명령어 : control + c
[5] DB 파일 생성 방법 : 세션키 유지한 상태로, JDBC URL에 해당 jdbc:h2:~/jpashop
입력후 연결
버튼을 클릭한다. 그러면 /jpashop이라는 DB 파일이 생성된다.
jdbc:h2:tcp://localhost/~/jpashop
입력후 연결
버튼을 클릭한다.Live Template
기능을 적용시켜서 코드의 가독성을 높여보자.@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
}
기존 코드에서 @Test 와 같이 테스트코드의 형식은 똑같은 경우가 많다.
해당 테스트코드를 Live Template 기능을 적용시켜보자.
위측 상단의 IntelliJ IDEA -> Settings -> Live Template
custom
아래에 tdd라는 이름을 추가하기 위해 오른쪽에 +
버튼을 클릭하고, Abbreviation
부분에 tdd를 입력한다.
Description
부분에는 tdd에 대한 설명을 입력하면 된다.(나는 설명이 필요없기 때문에, tdd로 했다)그리고 아래의 Template text
부분에 반복적으로 작성할 코드를 입력한다.
입력을 다한 이후에 Apply -> Ok 버튼을 클릭한다.
해당 코드로 넘어와서 tdd 를 입력하고 Tap 키를 누르면, 아래와 같이 Live Template 기능이 적용된 것을 확인할 수 있다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
@Test
public void testMember() throws Exception {
//given
//when
//then
}
}
SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY, COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY;
이번 문제는 컬럼에서 특정 문자열을 추출하고 이를 집계하는 문제였다.
[1] 상품 카테코리 코드(PRODUCT_CODE, 2)별 상품 개수를 출력한다.
아래 실행 예시를 보면 CATEGORY
, PRODUCTS
을 확인할 수 있다. -> 문제에서 해당 두개의 컬럼을 사용하라는 의미다.
‘PRODUCT_CODE’ 컬럼에서 앞 2글자가 CATEGORY
를 의미하고, 카테고리별로 해당하는 숫자를 구하면 되는 문제인 것이다.
결과 : SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY, COUNT(PRODUCT_ID) AS PRODUCTS
[2] PRODUCT 테이블에서 가져오는 것이므로 -> 결과 : FROM PRODUCT
[3] 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요. -> 실행 예시에서는 CATEGORY
를 기준으로 오름차순 했으므로 해당 키워드를 사용하라는 의미다.
유형별로 갯수를 알고 싶을 때 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY
를 사용한다. (특정 컬럼을 그룹화)
결과 : GROUP BY CATEGORY
: 기본적으로 오름차순으로 정렬한다.