241025 TIL SQL 쿼리 복습(문자 가공하기, HAVING, 소수점 관련 함수들)

J_log·2024년 10월 25일
0

코트카타 시간에 알고리즘 문제를 풀고 SQL문제도 있었다는걸 오늘에서야 알게되었다 .. ㅎ
프로그래머스에서 SQL 문제도 풀어볼 수 있다니 너무 좋다.
하지만 SQL을 3주만에 봤더니 그새 잃어버려서 다시 정리 겸 적어본다.

문자 가공하기

  • SUBSTR (SUBSTRING)

    • 데이터에서 보여 줄 문자를 필요에 맞게 자른다.
    • SUBSTR(컬럼명, 시작지점, 자를 지점)

      원본 데이터 Address컬럼에 저장되어있는 주소 목록들 "서울특별시 강남구 대치동"
      SUBSTR(Address, 1, 2) => "서울"

  • REPLACE

    • 특정문자를 원하는 문자로 변경하기
    • REPLACE (컬럼명, 변경할 문자, 변경될 문자)

      위 예시에서 이어서 해보자면
      REPLACE(Address, '대치동', '강남동')

  • CONCAT

    • 출력할 내용을 필요에 맞게 편집한다.

      역시 위 예제에서 이어서
      CONCAT('(', SUBSTR(Address, 1, 2), ')') => (서울)


문제를 풀면서 새롭게 알게 된 내용

  • HAVING
    • 데이터를 필터링할 때 사용. (WHERE절과 유사하다)
SELECT 
    customer_id, 
    SUM(order_amount) AS total_order_amount
FROM 
    orders
GROUP BY 
    customer_id
HAVING 
    SUM(order_amount) >= 1000;

고객별로 주문 총액을 계산하고 총액이 천원 이상인 고개만 조회하는 SQL

  • 그렇다면 WHERE와 HAVING은 무엇이 다를까?
    • HAVING절은 WHERE와 비슷하지만 그룹을 나타내는 결과 집합의 행에만 적용된다.
    • 집계함수(SUM(), AVG() 등)와 함께 사용할 수 있다. WHERE는 HAVING절에 포함된 하위 커리에 있지 않으면 집계함수와 함께 사용하는 것이 불가능 하다.
    • HAVING은 GROUP BY 뒤에 사용 , WHERE은 GROUP BY 앞에 사용한다.

ROUND, FLOOR, CEILING

  • ROUND

    • ROUND는 정해진 자릿수에 따라 반올림 하는 역할을 하는 함수이다.

    • 구하려는 소수점 자리수의 한 자리 아래의 숫자를 반올림 하거나 버린다.

    • 반올림 여부의 값을 0 또는 생각하는 경우에는 반올림, 음수값일 경우는 버린다.

      ROUND(반올림할 대상 숫자, 반올림 기준)

      
      SELECT ROUND(10.349) 	-- 10
      SELECT ROUND(10.349, 1) -- 10.3
      SELECT ROUND(10.349, 2) -- 10.35 
      SELECT ROUND(11.546) 	-- 12
      SELECT ROUND(11.546, 1) -- 11.5
      SELECT ROUND(11.546, 2) -- 11.54 
      

      반올림 기준에다 -1을 대입하면 소수점 기준으로 오른쪽이 아닌 왼쪽을 반올림 대상으로 정한다.

      
      SELECT ROUND(10.349, -1) -- 10
      SELECT ROUND(11.546, -1) -- 10
      SELECT ROUND(48,-1) -- 50
  • CEILING

    • 소수점 이하를 무조건 올리는 함수이다.

    • ROUND와 다르게 무조건 정수값으로 출력된다.

      CEILING(숫자)

      
      SELECT CEILING(21.35) -- 22
      SELECT CEILING(23.56) -- 24
  • FLOOR

    • 소주점 이하를 무조건 버리는 함수이다.

    • CEILING과 동일하게 정수값으로 출력된다.

      FLOOR(숫자)

      
      SELECT FLOOR(23.59) --23
      SELECT FLOOR(25.32) --25
post-custom-banner

0개의 댓글