목록SQL (22)
데이터로그😎
테이블 컬럼 type 확인하기 HISTORY_DT라는 테이블이 있다고 가정하자. 이 때 테이블 내 column의 형식을 확인하고 싶다면, DESC + 테이블명 을 사용하면 된다. DESC HISTORY_DT; 확인 결과, DT (날짜) 컬럼의 Type이 date이다. 만약 이 date타입의 컬럼을 문자열로 바꾸고 싶을 땐 어떻게 해야할까? DATE_FORMAT : 날짜 데이터 → 문자열 날짜형 데이터를 문자열로 바꾸고 싶다면 DATE_FORMAT(변환할 날짜형식 컬럼, 변환형식) 을 사용할 수 있다. 변환 결과로 생성된 tr_date 1, 2,3 컬럼을 확인해보면 원하는 형식대로 변환된 것을 확인할 수 있다. SELECT DATE_FORMAT(DT, '%Y%m%d') as tr_date, DATE_FOR..
REGEXP: 정규표현식을 사용하여 패턴 매칭을 수행하는 MySQL의 연산자 이를 사용한 예시를 leetcode 문제에서 보여주겠다. Table: Users +---------------+---------+ | Column Name | Type | +---------------+---------+ | user_id | int | | name | varchar | | mail | varchar | +---------------+---------+ user_id is the primary key (column with unique values) for this table. This table contains information of the users signed up in a website. Some e-..
이전에 발행한 윈도우 함수 관련 글 ↓ [윈도우 함수] SUM() OVER() 아래 문제를 통해 OVER() 함수에 대해 알아보자. 2023년 4월 기준 전국 주요 시/도의 연령대별 인구수 합계를 구하고, 연령대별 인구 비율 구하기 ✅step1 :2023년 4월 기준 전국 주요 시/도의 연령대별 fine-1004.tistory.com [윈도우 함수] RANK() OVER() 쿼리문 작성 시 '순위'를 매겨야 할 때가 있다. 예를 들면, A라는 class 내에서 수학성적 1등이 누구인지? 혹은 내가 운영하는 책방에서 판매량이 1위인 책이 무엇인지? 등을 알아보고 싶을 때. 이 fine-1004.tistory.com Leet Code를 풀고 있는데, 이전 row와 다음 row를 참조해야 하는 문제가 있었다...
쿼리문 작성 시 '순위'를 매겨야 할 때가 있다. 예를 들면, A라는 class 내에서 수학성적 1등이 누구인지? 혹은 내가 운영하는 책방에서 판매량이 1위인 책이 무엇인지? 등을 알아보고 싶을 때. 이 때, 당연히 MAX()를 사용해도 된다. "SELECT MAX(sales) FROM book_sales ORDER BY sales DESC LIMIT 1;" 이렇게. 그러나 만약 section 별로 순위를 알고 싶다면? 예를 들어, 책 판매량을 "장르 별" 로 알고싶다면??? 나는 자기계발 분야, 소설 분야, 경제 분야 등 이렇게 장르 별로 판매량이 알고 싶은데... 이 땐 전체 전체 sales 중에서 max를 사용해도 장르 별 판매량 1위는 알 수가 없다. 이 때 사용하는 것이 바로 윈도우 함수인 RA..
GROUP BY ~ WITH ROLLUP group by 시 옆에 with rollup을 붙이게 되면 group by를 한 섹션 별로 소계가 생기게 된다. 만약 group by에 한 컬럼만 썼다면? 총계가 나옵니다. SELECT CountryCode, Sum(population) FROM world.city GROUP BY CountryCode WITH ROLLUP; 그러나, 여기서 궁금한 점! 만약 값 자체가 NULL인 것들과 GROUP BY ~ WITH ROLLUP으로 인해 총계 옆에 NULL이라고 나오는 것들을 어떻게 구분하지?? 이를 위해 GROUPING 함수가 나왔다고 한다. GROUPING GROUPING 함수는 그 인자를 그루핑 기준에서 고려하지 않은 부분 , 즉 총계나 소계인 경우에는 1을..
Replace(컬럼명, 대체 하고싶은 문자, 대체할 문자) 문자 혹은 숫자를 다른 문자로 대체하고 싶을 때 사용 문자, 숫자 모두 가능 예시: IndepYear라는 컬럼에서 19라는 숫자를 ** 으로 대체해주세요. SUBSTR(컬럼명, a, b) 문자열에서 "a번째 자리" 부터 b개의 문자를 추출하고 싶을 때 REPLACE + SUBSTR a번째 자리에서부터 b개의 글자를 특정 문자로 치환하고 싶을 때 LPAD, RPAD 원하는 글자 수 만큼 특정 문자로 자릿수를 채우고 싶을 때 LPAD(문자열, 원하는 총 문자 길이, 채울 문자 길이) TRIM, LTRIM, RTRIM 공백 제거위해 사용 공백을 눈으로 확인하기 위해 _(언더바)로 replace했다. LTRIM을 사용했을 때 좌측 공백이 사라진 것을 볼..
*MySQL 환경입니다. Null과 공백의 차이 어느날 address라는 테이블을 찾아보았더니 아래와 같은 공백이 보이는 것! 그래서 IS NULL을 사용해서 공백값만 뽑아보려 했으나.. 아무 것도 나오지 않음. 위의 공백 데이터는 말그대로 공백('')으로 처리된 것이지 아예 값이 안 들어간 것이 아니었음. 여기서 궁금증... 그럼... 데이터가 굉장히 많을 때 어떻게 공백을 포함한 null값을 찾을 수 있느냐?? 아래와 같이 찾으면 된다. 아래 두개 쿼리 모두 동일한 결과를 보여준다. NULLIF(postal_code, ' ')는 "postal_code가 ''(공백)이면 NULL값을 return해주세요" 라는 뜻이다. 즉 WHERE NULLIF(postal_code, '') IS NULL 은 아래와 같..
아래 문제를 통해 OVER() 함수에 대해 알아보자. 2023년 4월 기준 전국 주요 시/도의 연령대별 인구수 합계를 구하고, 연령대별 인구 비율 구하기 ✅step1 :2023년 4월 기준 전국 주요 시/도의 연령대별 인구수 합계를 구하기 SELECT AGRDE_SE_CD, sum(POPLTN_CNT) pop_cnt FROM tb_popltn WHERE ADMINIST_ZONE_NO LIKE '__00000000' AND POPLTN_SE_CD = 'T' AND STD_MT = '202304' GROUP BY AGRDE_SE_CD ORDER BY AGRDE_SE_CD; ✅step2: step1의 테이블을 from 절에 subquery로 놓고 sum() over()를 사용해 집계. ** sum(pop_cn..