SQL

250522_내일배움캠프_FIELD 함수

baektree 2025. 5. 22. 21:53

오늘의 학습에 대하여

  • FIELD 함수 : 리스트 안에 값이 몇 번째에 위치하는지 알려주는 함수, 정렬에 활용할 수 있다.

1. 오늘 학습 한 내용을 나만의 언어로 정리하기

  • FIELD 함수 : 리스트 안에서 값이 몇 번째에 위치하는지 알려주는 함수
    SELECT FIELD('grape', 'apple', 'banana', 'cherry');
    
    # 0 (값이 없으면 0으로 출력된다.)
    
    • 활용예시1) 정렬에 응용되기도 한다.
    • ODRDER BY FIELD(ANIMAL_TYPE, 'Cat', 'Dog') #ANIMAL_TYPE이 'Cat'이면 1, 'Dog'이면 2를 반환한다. 따라서 숫자 기준으로 정렬되기 때문에 'Cat' -> 'Dog'순으로 나온다. 만약 ORDER BY ANIMAL_TYPE만 쓰면 알파벳 순으로 정렬된다.
    • 활용예시2) case 문 대신 간단히 쓰인다.
    • -- 이건 복잡한 CASE ORDER BY CASE role WHEN 'Manager' THEN 1 WHEN 'Team Lead' THEN 2 WHEN 'Staff' THEN 3 ELSE 4 END; -- 이건 FIELD로 간단하게 ORDER BY FIELD(role, 'Manager', 'Team Lead', 'Staff');
  • SELECT FIELD('banana', 'apple', 'banana', 'cherry'); # 2
  • WHERE 과 HAVING
    • WHERE은 그룹화(집계)전에 필터링 한다 → 개별 행에 조건 걸기
    • HAVING은 그룹화(집계)후에 필터링 한다. → 집계 결과에 조건 걸기
  • 둘다 조건을 걸 때 사용하는데, 사용 시점과 대상이 다르다.
    SELECT HOUR(DATETIME) as HOUR,   -> 날짜시간형식 데이터에서 시간만 가져오기
            COUNT(*) AS COUNT        -> 시간대별 개수 세기   
    FROM ANIMAL_OUTS
    GROUP BY 1
    HAVING HOUR BETWEEN 9 AND 19     -> 그룹핑 한 것 중에서 9 ~ 19 값만 보기
    ORDER BY 1                       -> 시간 오름차순으로 정렬하기
    
    #GROUP BY & HAVING은 짝꿍이다.
    그룹으로 묶은 다음에 그중 일부 결과값만 보려고 하면 HAVING 구문을 쓰는 것이다.
    
    WHERE는 먼저 필터링 후 연산하는 것이다.
    ​
  • 참고로 WHERE 절에는 집계함수(COUNT, MAX)사용할 수 없다.

2. 학습하며 겪었던 문제점 & 에러

  • WHERE price = Max(price) ( X )
    • WHERE 절에는 집계 함수 사용할 수 없다. 이것이 SQL 문법이다.

3. 내일 학습 할 것은 무엇인지

  • [ ] SQL 코드카타를 통해 전반적으로 복습
  • [ ] SQL 강의의 실습 풀어보기 > 어려운 건 다시 시청하기

#내일배움캠프 #사전캠프 #TIL