YUL0426 / database

0 stars 0 forks source link

그루핑해서 보기 퀴즈 #5

Open YUL0426 opened 3 years ago

YUL0426 commented 3 years ago

1.order(주문) 테이블에서 order_area(주문한 지역) 컬럼의 고유값을 구하려고 합니다. 다음 빈 칸에 들어갈 영어 단어를 모두 대문자로 직접 작성해보세요.

SELECT ( )(order_area) FROM order;

답 : DISTINCT

특정 컬럼에 존재하는 고유한 값들을 보려면 해당 컬럼 이름 앞에 DISTINCT를 붙여주면 됩니다. => SELECT DISTINCT(order_area) FROM order;

  1. order(주문) 테이블에서 client_request 컬럼에는 고객의 별도 요청사항이 문자열 타입으로 저장되어 있습니다. 이때 각 문자열 값의 왼쪽, 오른쪽에 존재하는 공백을 모두 제거하고 조회하려고 하는데요. 다음 빈 칸에 들어갈 단어를 모두 대문자로 직접 작성해보세요.

SELECT ( )(client_request) FROM order;

답 : TRIM

문자열의 공백을 제거하는 함수에는 LTRIM(왼쪽 공백 제거), RTRIM(오른쪽 공백 제거), TRIM(양쪽 공백 제거)이 있습니다. => SELECT TRIM(client_requset) FROM order;


  1. order(주문) 테이블에서 order_area(주문 지역) 컬럼을 우선 기준으로, name(메뉴 이름) 컬럼을 그 다음 기준으로 설정하여, row들을 그루핑해서 각 지역에서 주문된, 각 메뉴들의 수를 보려고 합니다. 다음 빈 칸에 들어갈 적절한 문구는 무엇일까요?

SELECT order_area, name, COUNT(*) FROM order ( );

답 : GROUP BY order_area, name GROUP BY 뒤에는 그루핑 기준으로 사용할 컬럼들의 이름을 여러 개 적어줄 수 있습니다. 큰 덩어리로 그루핑하고 싶으면 그루핑 기준을 조금만 적어주고, 아주 상세한 수준까지 그루핑하고 싶다면 많이 적어주면 되겠죠?


  1. 3번 문제의 SQL 문을 실행하면 order_area와 name 쌍의 조합을 기준으로 row들이 그루핑됩니다. 이때 여러 그룹들 중에서도 그 안에 속한 row 수가 3개 이상인 그룹들만 보고 싶습니다. 그리고 그 그룹들을 row 수 기준으로 내림차순 정렬하려고 하는데요. 괄호 안에 들어갈 말을 모두 대문자로 직접 작성해보세요.

SELECT order_area, name, COUNT() FROM order GROUP BY order_area, name ( ) COUNT() >=3 ORDER BY COUNT(*) DESC;

답 : HAVING

GROUP BY로 그루핑을 하고 난 후, 생성된 그룹들 중에서 특정 그룹들만 선별하려면 HAVING 절을 사용해야 합니다. 간혹, 이 HAVING 절과 WHERE 절을 혼동하시는 분들이 있는데요. WHERE 절은 SELECT 문에서 맨 처음에 row들을 필터링 할 때 쓰이고, 그 후로 그루핑까지 거친 후에야 HAVING 절에서 그 그룹들을 필터링하는 겁니다.


  1. SELECT 문에서 쓰이는 각 절의 정확한 실행 순서 FROM - WHERE - GROUP BY - HAVING- SELECT - ORDER BY - LIMIT