TIL(Today I Learned)_데일리루틴_24.11.18.Mon

728x90

데일리루틴 SQL

MySQL 조건에 맞는 사용자와 총 거래금액 조회하기 정답입니다.
SELECT B.WRITER_ID USER_ID, U.NICKNAME, SUM(B.PRICE) TOTAL_SALES
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_USER U ON U.USER_ID = B.WRITER_ID
WHERE B.STATUS = 'DONE'
GROUP BY B.WRITER_ID, U.NICKNAME
HAVING SUM(B.PRICE) >= 700000
ORDER BY TOTAL_SALES

 

  • SELECT B.WRITER_ID USER_ID, U.NICKNAME, SUM(B.PRICE) TOTAL_SALES
    • 게시글 작성자 ID(WRITER_ID)를 USER_ID라는 별칭으로 선택합니다.
    • 사용자 닉네임(NICKNAME)을 선택합니다.
    • 작성자가 판매한 상품 가격(PRICE)의 총합을 TOTAL_SALES라는 별칭으로 선택합니다.
  • FROM USED_GOODS_BOARD B
    • 중고 상품 게시판 데이터 테이블(USED_GOODS_BOARD)을 조회합니다.
    • 이 테이블은 B라는 별칭으로 사용됩니다.
  • JOIN USED_GOODS_USER U ON U.USER_ID = B.WRITER_ID
    • 사용자 정보 테이블(USED_GOODS_USER)을 게시판 테이블과 조인합니다.
    • 게시글 작성자 ID(B.WRITER_ID)와 사용자 ID(U.USER_ID)가 일치하는 데이터를 연결합니다.
  • WHERE B.STATUS = 'DONE'
    • 판매 상태(STATUS)가 'DONE'(판매 완료)인 게시글만 필터링합니다.
  • GROUP BY B.WRITER_ID, U.NICKNAME
    • 작성자 ID(B.WRITER_ID)와 닉네임(U.NICKNAME)을 기준으로 그룹화합니다.
    • 사용자별로 총 판매 금액을 계산할 수 있도록 그룹을 만듭니다.
  • HAVING SUM(B.PRICE) >= 700000
    • 그룹화된 데이터 중에서 총 판매 금액(SUM(B.PRICE))이 700,000원 이상인 데이터만 선택합니다.
  • ORDER BY TOTAL_SALES
    • 총 판매 금액(TOTAL_SALES)을 기준으로 결과를 정렬합니다.
    • 기본적으로 오름차순(낮은 금액부터 높은 금액 순)으로 정렬됩니다.

 


데일리루틴 알고리즘

Java 크기가 작은 부분문자열 정답입니다.
class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        int pLength = p.length();
        long pValue = Long.parseLong(p);

        for (int i = 0; i <= t.length() - pLength; i++) {
            String substring = t.substring(i, i + pLength);
            long substringValue = Long.parseLong(substring);

            if (substringValue <= pValue) {
                answer++;
            }
        }
        return answer;
    }
}

 

  • 클래스 및 메서드 정의
    • class Solution : Solution이라는 클래스 정의.
    • public int solution(String t, String p) : 문자열 t와 p를 입력으로 받는 메서드 solution을 정의. 결과값으로 정수(int)를 반환.
  • 변수 초기화
    • int answer = 0; : 조건을 만족하는 경우의 수를 저장하기 위한 변수 answer를 0으로 초기화.
  • 문자열 p의 길이 저장
    • int pLength = p.length(); : 문자열 p의 길이를 변수 pLength에 저장. 이후 반복문에서 사용할 예정.
  • 문자열 p를 숫자로 변환
    • long pValue = Long.parseLong(p); : 문자열 p를 숫자로 변환해 long 타입 변수 pValue에 저장. 문자열 비교 대신 숫자 비교를 위해 사용.
  • 반복문을 통한 서브스트링 비교
    • for (int i = 0; i <= t.length() - pLength; i++) : 문자열 t에서 p와 같은 길이의 부분 문자열을 찾기 위해 반복문을 실행. i는 부분 문자열의 시작 인덱스를 의미.
  • 서브스트링 추출
    • String substring = t.substring(i, i + pLength); : 문자열 t에서 i번째 인덱스부터 i + pLength까지의 부분 문자열을 추출하여 substring에 저장. 이 부분 문자열의 길이는 p의 길이와 동일.
  • 서브스트링을 숫자로 변환
    • long substringValue = Long.parseLong(substring); : 추출한 부분 문자열을 숫자로 변환하여 long 타입 변수 substringValue에 저장.
  • 조건을 만족하는지 확인
    • if (substringValue <= pValue) : substringValue가 pValue보다 작거나 같은지 확인.
    • answer++ : 조건을 만족하면 answer 값을 1 증가.
  • 결과 반환
    • return answer; : 모든 반복이 끝난 후 조건을 만족하는 부분 문자열의 개수를 반환.

 

728x90
반응형
LIST