강의로 돌아가기
jihn011258@g.skku.edu

어디가 문제인지 알 수 있을까요??

-- 코드를 작성해주세요
SELECT
    DATE_FORMAT(A.DIFFERENTIATION_DATE, '%Y') AS YEAR
    , (B.SIZE - A.SIZE_OF_COLONY) AS YEAR_DEV           -- 최대크기 - 해당크기
    , A.ID
FROM
    ECOLI_DATA A
    , (
        SELECT
            DATE_FORMAT(DIFFERENTIATION_DATE, '%Y') AS YEAR
            , MAX(SIZE_OF_COLONY) AS SIZE
        FROM
            ECOLI_DATA
        GROUP BY
            YEAR
      ) B   -- (년도, 년도 별 최대 크기) 쿼리
WHERE
    DATE_FORMAT(A.DIFFERENTIATION_DATE, '%Y') = B.YEAR  -- 년도별 JOIN 
ORDER BY
    YEAR, YEAR_DEV     -- 년도 오름차순 및 편차 오름차순

예제랑 답은 같게 나옵니다ㅠㅠ

2 개의 답변
jihn011258@g.skku.edu

위에 분이 올려주신 글 참고해서 고쳤습니다.
DATE_FORMAT을 YEAR로 바꾸니 통과했습니다.
아래가 맞는 코드입니다.

-- 코드를 작성해주세요
SELECT
    YEAR(A.DIFFERENTIATION_DATE) AS YEAR
    , (B.SIZE - A.SIZE_OF_COLONY) AS YEAR_DEV           -- 최대크기 - 해당크기
    , A.ID
FROM
    ECOLI_DATA A
    , (
        SELECT
            YEAR(DIFFERENTIATION_DATE) AS YEAR
            , MAX(SIZE_OF_COLONY) AS SIZE
        FROM
            ECOLI_DATA
        GROUP BY
            YEAR
      ) B   -- (년도, 년도 별 최대 크기) 쿼리
WHERE
    YEAR(A.DIFFERENTIATION_DATE) = B.YEAR  -- 년도별 JOIN 
ORDER BY
    YEAR, YEAR_DEV     -- 년도 오름차순 및 편차 오름차순
백제완

DATEFORMAT(DIFFERENTIATIONDATE, '%Y') 로 적었을 때 틀릴 수 있는 경우가 있는데
DIFFERENTIATION_DATE에 들어있는 데이터의 형식이 YYYY-MM-DD가 아니라 YY-MM-DD일 경우에는 처리 과정이 YEAR()함수와 다르다고 하네요.
YY-MM-DD의 YY의 값이 69년도를 기준으로 1900년도의 값인지, 2000년도의 값인지를 판별하는 데에 차이가 있습니다.


| 날짜        | YEAR() | DATE_FORMAT(DIFFERENTIATION_DATE, '%Y') |
|------------|--------|-----------------------------------------|
| '68-01-02' | 2068   | 1968                                    |
| '69-01-02' | 2069   | 1969                                    |
| '70-01-02' | 1970   | 1970                                    |

69년도를 기준으로 하는 테스트 케이스가 있나 보네요
참고 자료

  • jihn011258@g.skku.edu

    아 그러면 테케에 `YY-MM-DD` 형식이 있을수도 있는거군요. 무슨 차이인지 도저히 모르겠었는데 덕분에 배워갑니다 ㅠㅠ 정말 감사합니다!!

    jihn011258@g.skku.edu―2024.03.28 15:35
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.