(기본) 엑셀 함수 --> SQL에 적용하기

dorongpark·2024년 6월 3일
0

해커랭크(sql)

목록 보기
3/20

들어가기 전에...

엑셀의 기본 집계 함수 (AVERAGE,SUM,COUNT,MAX,MIN 등)는 SQL에서 SELECT절 단독 사용이 가능하지만 , 조건에 맞는 집계값 (SUMIF, COUNTIF 등)을 가져오기 위한 SQL의 기능은 함수를 복합해서 사용 해야 한다.
아래 장표는 엑셀과 SQL의 비슷한(완전히 같지 않을 수도 있다) 기능을 모아 두었으니, 두개를 자주 사용하는 사람에게 큰 도움이 될 것이다.

엑셀 VS SQL 함수

  • 동일하게 사용하는 함수
엑셀 함수설명엑셀 예시MySQL 대응 함수MySQL 대응 쿼리
SUM범위 내 숫자의 합계를 구하기=SUM(A1:A10)SUM()SELECT SUM(컬럼) FROM table_name;
AVERAGE범위 내 숫자의 평균을 구하기=AVERAGE(A1:A10)AVG()SELECT AVG(컬럼) FROM table_name;
MAX범위 내 숫자의 최대값을 구하기=MAX(A1:A10)MAX()SELECT MAX(컬럼) FROM table_name;
MIN범위 내 숫자의 최소값을 구하기=MIN(A1:A10)MIN()SELECT MIN(컬럼) FROM table_name;
COUNT범위 내 숫자 또는 항목의 개수를 구하기=COUNT(A1:A10)COUNT()SELECT COUNT(컬럼) FROM table_name;
  • 기능은 같으나 다른 함수조합을 쓰는 경우
    - 조건식이 추가 될때는 단순 AND 로 엮어 주면 된다
    • EX) SUMIF(CASE WHEN A>10 AND B<=5 THEN WEEK ELSE 0 END)
    • 주의점: THEN 뒤의 컬럼과 ELSE 컬럼의 데이터 형태가 같아야 한다.
    • EX) 문자열: THEN VARCHAR ELSE NULL / 숫자: THEN INT ELSE 0
엑셀 함수설명엑셀 예시MySQL 대응 함수MySQL 대응 쿼리MySQL 예시
IF조건에 따라 다른 값 반환=IF(A1 > 10, "크다", "작다")IF() 또는 CASE WHENSELECT CASE WHEN A > 10 THEN '크다' ELSE '작다' END AS size FROM table_name;
또는
SELECT IF(A > 10, '크다', '작다') AS size FROM table_name;
SELECT CASE WHEN A > 10 THEN '크다' ELSE '작다' END AS size FROM employee_data;
또는
SELECT IF(A > 10, '크다', '작다') AS size FROM employee_data;
SUMIF조건에 맞는 셀의 합계 구하기=SUMIF(A1:A10, ">10", B1:B10)SUM(), IF() 또는 CASE WHENSELECT SUM(CASE WHEN A > 10 THEN B ELSE 0 END) FROM table_name;
또는
SELECT SUM(IF(A > 10, B, 0)) FROM table_name;
SELECT SUM(CASE WHEN A > 10 THEN B ELSE 0 END) AS total_sum FROM sales_data;
또는
SELECT SUM(IF(A > 10, B, 0)) AS total_sum FROM sales_data;
COUNTIF조건에 맞는 셀의 개수 세기=COUNTIF(A1:A10, ">10")COUNT(), IF() 또는 CASE WHENSELECT COUNT(CASE WHEN A > 10 THEN 1 END) FROM table_name;
또는
SELECT COUNT(IF(A > 10, 1, NULL)) FROM table_name;
SELECT COUNT(CASE WHEN A > 10 THEN 1 END) AS count FROM sales_data;
또는
SELECT COUNT(IF(A > 10, 1, NULL)) AS count FROM sales_data;
AVERAGEIF조건에 맞는 셀의 평균 구하기=AVERAGEIF(A1:A10, ">10", B1:B10)AVG(), IF() 또는 CASE WHENSELECT AVG(CASE WHEN A > 10 THEN B ELSE NULL END) FROM table_name;
또는
SELECT AVG(IF(A > 10, B, NULL)) FROM table_name;
SELECT AVG(CASE WHEN A > 10 THEN B ELSE NULL END) AS avg_value FROM sales_data;
또는
SELECT AVG(IF(A > 10, B, NULL)) AS avg_value FROM sales_data;
VLOOKUP테이블에서 값 찾아 반환하기=VLOOKUP(A1, B1:C10, 2, FALSE)JOINSELECT t1.A, t2.C FROM table1 t1 JOIN table2 t2 ON t1.A = t2.B;SELECT t1.product_name, t2.category_name FROM products t1 JOIN categories t2 ON t1.category_id = t2.category_id;
TEXT숫자나 날짜 형식 변환=TEXT(A1, "yyyy-mm-dd")FORMAT(), DATE_FORMAT()SELECT DATE_FORMAT(date_column, '%Y-%m-%d') AS formatted_date FROM table_name;SELECT DATE_FORMAT(order_date, '%Y-%m-%d') AS formatted_date FROM orders;
profile
야 너도 분석 할수 있어

0개의 댓글