[TIL] 24.09.16 MON

GDORI·2024년 9월 16일
0

TIL

목록 보기
43/79
post-thumbnail

아.. 이 얼마만에 느껴보는 편안한 월요일이었는지..
오늘은 알고리즘 코드카타 1문제 풀고 SQL 문법이 부족하여 공부좀 했다.
챌린지반 따라가려면 기본기 탄탄해야지;😒

[ 오늘 푼 알고리즘 코드카타 ]

42842. 카펫

SQL 기본 문법

필터링에 유용한 표현

  1. 비교연산자

  2. 다양한 조건 ( BETWEEN, IN, LIKE )

  • BETWEEN A AND B
    학생 때 단어장에 자주 등장하던 between a and b
    a와 b 사이에~ 많이 봤을겁니다.
    sql에서도 사용할 수 있어요
// 10살과 20살 사이인 자
WHERE age between 10 and 20
  • IN
    전치사 in은 대표적으로 '안에'라는 뜻을 가진 부사입니다. 따라서 우리는 원하는 쿼리 내 포함해야할 것들을 in으로 뽑아낼 수 있습니다.
age in (15,17,19)
  • LIKE
    LIKE.. 좋아하다라는 의미도 가지고 있지만 ~와 같은 이라는 뜻도 함유하고 있어요.
    비슷한 값을 조건으로 주어 찾아낼 수 있습니다.
// 양으로 시작하는 이름
name like '양%'
// 철로 끝나는 이름
name like '%철'
// 식당 이름에 '고기' 라는 문자가 포함
restaurant_name like '%고기%'

여러 조건을 동시에 쓰려면 어떻게 ?

이름이 윤으로 끝나면서, 나이가 50세 이상인 사람을 구하고 싶을 때 어떻게 해야하나?
WHERE 절에 두 가지 조건을 써주면 됩니다.

WHERE name LIKE '%윤' age >= 50;

근데 두개를 그냥 붙인다? 아니 윤으로 끝나면서 50세 이상이라는 건지, 윤으로 끝나던가 또는 50세 이상이던가
알 수가 없습니다..
이럴 때 쓰는 것이 논리연산

WHERE name LIKE '%윤' and age >= 50;

위와 같이 써주면 됩니다~

그럼 테이블 이름은 food_orders이고, 국적은 cuisine_type, 식당명은 restaurant_name, 고객번호는 customer_id, 상품 준비시간은 food_preparation_time 일 때
상품 준비시간이 20~30분 사이인, 한국음식점의 식당명과 고객번호 조회하려면 어떻게 해야할까요?

SELECT restaurant_name, customer_id
FROM food_orders
WHERE food_preparation_time BETWEEN 20 AND 30 AND cuisine_type = "korean"

이렇게 쓸 수 있습니다~

SQL도 계산할 수 있다구요.

SQL은 기본 사칙연산과 기본적인 계산 함수를 제공하고 있습니다. SUM,AVG와 같이요.

  • 합계와 평균값 구하기
select sum(food_preparation_time) total_food_preparation_time,
       avg(delivery_time) avg_food_preparation_time
from food_orders
  • 데이터 갯수 구하기
    데이터 갯수 : COUNT(컬럼) * 컬럼명 대신 1 혹은 별 사용 가능
    몇개의 값을 가지고 있는지 구할 때 : DISTINCT

  • 최대, 최소값 구하기

select min(price) min_price,
       max(price) max_price
from food_orders

그러면 주문금액이 30,000원 이상인 주문 건수는 어떻게 구할까요?

select COUNT(1) count_of_order
from food_orders
WHERE food_orders.price >=30000

다음과 같이 구하면 되겠습니다 .

그룹으로 묶으면 편해요.

음식 종류별로 평균 음식을 구하기 위해서 where절을 여러번 사용하여 쿼리를 여러개로 작성하는 것은 비효율적입니다.
Group by를 이용하면 편하게 해결할 수 있어요!

음식 종류별 주문 금액 합계를 구해볼까요?

select 카테고리컬럼, 주문금액 합계
from food_orders
group by 카테고리컬럼

이런식으로 구성할 수 있겠습니다.

select cuisine_type, sum(price) sum_of_Price
from food_orders
group by cuisine_type

그럼 이번에는 음식점별 주문 금액 최댓값을 조회해보겠습니다.

select restaurant_name, max(price)
from food_orders
group by restaurant_name

참 편하고 좋네요.😁

오름차순으로 헤쳐 모여

데이터를 오름차순, 내림차순으로 정렬할 수 있어요.
바로 Order by로요.
오름차순은 ASC, 내림차순은 DESC라 표기하는데 ASC의 경우 생략이 가능합니다!

음식점별 주문금액 최댓값을 조회하는데, 최댓값 기준으로 내림차순 정렬해보겠습니다.

SELECT restaurant_name, max(price) max_price
FROM food_orders
GROUP BY restaurant_name 
ORDER BY max_price DESC 

그룹화 시켜준 후 주문금액 최댓값을 구해주고, 그 값을 통해 내림차순을 진행시켜주면 됩니다.

마무리

음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬을 끝으로 마무리 짓겠습니다.

SELECT cuisine_type, max(price) max_price, min(price) min_price
FROM food_orders
GROUP BY cuisine_type 
ORDER BY min_price DESC
profile
하루 최소 1시간이라도 공부하자..

0개의 댓글