SELECT CAR_ID, AVERAVE(DATE(END_DATE - START_DATE), 2) AS AVERAGE_DURATION WHERE AVERAGE_DURATION >= 7 ORDER BY AVERAGE_DURATION DESC,CAR_ID DECS;
1) 오타 및 예약어 오류
- AVERAVE -> 함수명 오타. AVG 써야함
- DESC -> 내림차순 키워드 오타. DESC로 써야함
2) 날짜 차이 계산 오류 (+1일 필수)
- 당일 대여 및 반납은 대여기간이 1일이어야 함
- DATEIFF(END_DATE, START_DATE) +1를 해야 정확한 대여 일수가 나옴
3) GROUP BY 및 HAVING 절 누락
- 자동차ID별 평균을 구하려면 GROUP BY CAR_ID가 필요함.
- 집계함수(AVG) 조건은 WHERE 절이 아닌 HAVING 절에서 처리함
4) 반올림 함수
- 소수점 두번째 자리에서 반올림하여 소수점 첫째자리까지 표현해야 하므로 ROUND 사용함
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;
1) 최대공약수(GCD) : 유클리드 호제법을 사용. a를 b로 나눈 나머지를 r이라고 할 때 gcd(a, b) = gcd(b, r) 성질을 이용해 나머지가 0이 될때까지 재귀나 반복문으로 구함
2) 최소공배수(LCM) : 두 수의 곱을 최대공약수로 나누면 됨(n * m / gcd)
class Solution {
public int[] solution(int n, int m) {
int gcd = getGcd(n. m);
int lcm = (n*m) / gcd;
return new int[] {gcd, lcm};
}
private int getGcd(int a, int b) {
while(b != 0) {
int r = a %b;
a = b;
b = r;
}
return a;
}
}
class Solution {
public String solution(String[] seoul) {
int result = 0;
for(int i = 0; i <seoul.length;i++) {
if(seoul[i] == "Kim") {
result = i;
}
}
return "김서방은 " + result + "에 있다";
}
}
틀린 이유
문자열의 값을 비교할 때는 .equals() 메소드 사용
최종 정답
class Solution {
public String solution(String[] seoul) {
int result = 0;
for(int i = 0; i <seoul.length;i++) {
if(seoul[i].equals("Kim")) {
result = i;
}
}
return "김서방은 " + result + "에 있다";
}
}