본문 바로가기

데이터/SQL8

[MySQL] Chat GPT로 샘플 데이터베이스 만들기 **DB 지식이 많이 부족하여, 사실과 다른 부분이 있을 수 있습니다. 언제든지 피드백 주시면 감사하겠습니다. MySQL을 Grafana와 연동하여 시각화하는 방법들을 정리해두고 싶어 샘플 데이터베이스가 필요했다. 실제로 쓰고 있는 데이터베이스를 쓸 순 없으니까 말이다. 사실 ERD를 그려보거나 데이터를 모델링하는 것은 나에게는 아직 벅찬 일이기도 하고 지금 하려고 하는 본질도 아니기에 이번에는 Chat GPT를 아주 적극적으로 활용해보기로 했다. 1. 필요사항 분석 최대한 현재 회사에서 다루고 있는 데이터와 유사하려면, 시간과 숫자값이 적당히 혼재되어 있는 데이터베이스가 필요했다. 오라클에서는 나오는 dept, emp와 같은 유명한 샘플데이터를 쓰기엔 적합하지 않았다. 그래서 거래데이터를 포함해 E-C.. 2023. 6. 28.
[MySQL] 변수값으로 where절 필터를 설정하는 동적쿼리 대시보드를 만드는 도중에 사용자에게 2가지 옵션을 주고 싶었다. 원하면 개별로 조회할 수 있게 변수명을 받아 검색기능을 넣고 그렇지 않다면 최근 날짜순으로 정렬해서 모든 데이터를 보여주는 식으로 말이다. -- @myVariable에 변수 값이 할당 SET @myVariable = 'abc'; -- 쿼리에 동적으로 WHERE 절 조건을 설정합니다. SELECT * FROM my_table WHERE (@myVariable IS NULL OR column_name = @myVariable); 이렇게 해두면 변수명이 비어있을 때는 전체를 조회하게 되고, 변수명이 입력되면 해당 변수명으로만 필터링하여 조회할 수 있다. 2023. 5. 16.
[MySQL] ST_DISTANCE_SPHERE 함수를 활용하여 거리/반경 구하기 ST_DISTANCE_SPHERE 함수란? MySQL에서 제공하는 지리 함수 중 하나로, 두 지점 사이의 거리를 구하는 데 사용한다.구의 표면을 이용하여 두 지점 사이의 최단 거리를 계산하고 이를 미터로 환산해준다. ST_DISTANCE_SPHERE 함수의 사용법 ST_DISTANCE_SPHERE(point(lon1, lat1), point(lon2, lat2)) 위 구문에서 lon1, lat1, lon2, lat2는 경도와 위도 값을 나타내다. 이 함수는 두 지점 사이의 거리를 미터 단위로 반환한다. 약간 헷갈리는게 우리가 위도/경도가 순서가 익숙한데 여기서는 경도, 위도 순이라는 점이다. 그럼 실제로 사용해보자. 부산시청과 서울시청과의 거리를 측정해볼텐데, 두 위치의 위경도는 여기서 구할 수 있다. .. 2023. 5. 5.
[MySQL] Order by 구문으로 숫자가 정렬되지 않을 때 정수타입(int)의 데이터를 정렬할 때, order by 구문을 써도 컬럼이 정렬되지 않을 때가 있다. 해당 컬럼이 숫자로만 이루어져있다고 해도 데이터 형식이 varchar, 혹은 다른 형식이기 때문이다. 당연히 가격 컬럼은 int 타입일거라 생각했는데, 확인해보니 varchar 타입이었다. 두 가지 해결 방법이 있다. ① CAST 함수를 사용해 타입을 명시적으로 바꿔주는 방법 SELECT id, product_name, unit, price FROM product ORDER BY CAST(price AS INT) ASC; CAST함수를 사용해 형변환을 해주는데 INT 뿐만 아니라 FLOAT 도 된다. ② 묵시적 형변환 SELECT id, product_name, unit, price FROM produ.. 2022. 11. 16.
[MySQL] 정규 표현식(instr(), like(), replace(), substr()) 정규 표현식이란 정규식 또는 정규 표현식은 문자열에서 일치하는 패턴을 찾아내는 데 쓰이는 형식 언어이다. 정규식에 대한 자세한 내용은 나중에 따로 정리해두겠지만, SQL에서도 쓸 수 있기에 함수만 아래와 같이 정리했다. 정규식 함수 및 연산자 NOT REGEXP 정규식의 부정 REGEXP 문자열이 정규식과 일치하는지 여부 REGEXP_INSTR() 정규식과 일치하는 부분의 문자열의 시작 인덱스 REGEXP_LIKE() 문자열이 정규식과 일치하는지 여부 REGEXP_REPLACE() 문자열이 정규식과 일치하는 부분을 바꾸기 REGEXP_SUBSTR() 문자열이 정규식과 일치하는 부분을 반환 RLIKE 문자열이 정규식과 일치하는지 여부 출처: https://dev.mysql.com/doc/refman/8.0.. 2022. 10. 31.
[MySQL] 없는 시간 표시하기(재귀적 CTE) 시계열(Time Series) 데이터가 아닌 경우 시계열 형태로 시각화를 할 때, 해당 범위에 데이터가 없는 경우 그래프가 아예 누락되게 된다. 이 경우 시각적으로 직관적이지도 않고, 그래서 해석하는데 시간이 더 걸리게 된다. 없는 숫자(e.g. 시간, 분 등) 표시하기 표기가 안되는 값을 강제로 출력하게 하여 없는 항목을 출력하게 만들 수 있다. WITH RECURSIVE my_cte AS ( SELECT 1 AS n UNION ALL SELECT 1+n FROM my_cte WHERE n 2022. 10. 26.
[MySQL] 날짜 형식/포맷 변환 함수- DATE_FORMAT DATE_FORMAT 함수 MySQL에서 시간,날짜를 원하는 형태로 표기 방식을 바꿔주는 함수 함수의 구성은 DATE_FORMAT(date,format) 이며, 문자열 date에 값의 형식을 format으로 지정한다. 아래 표에 표시된 지정자를 format문자열에 사용할 수 있다, 가장 많이 쓰는 형태 중 하나인 yyyy-mm-dd 라면, 다음과 같다. (여기서 ins_date라는 날짜/시간형태(yyyy-mm-dd hh:mm:ss인 column) DATE_FORMAT(ins_date, '%Y-%m-%d') SpecifierDescription 지정자 설명 부연 %a Abbreviated weekday name (Sun..Sat) %b Abbreviated month name (Jan..Dec) %c Mo.. 2022. 10. 20.
[SQL] 윈도우 함수(Window Functions) 쿼리문를 다루면서 Join도 하고 Aggregate Functions도 쓰기 시작하면서 재미를 느낄 때쯤 한계가 찾아왔다. 추출된 데이터를 엑셀과 같은 툴로 가공하는 과정을 거친다면 크게 불편하지 않았겠지만, 단 한번의 쿼리문으로 잘 정돈된 테이블 보고 싶을 때가 있었다. 그때 바로 찾아본 게 윈도우 함수다. 윈도우 함수(Window Function)란? 현재 행과 어떤 식으로 관련된 일련의 테이블 행에 대해 계산을 수행한다. 기존 집계함수는 GROUP BY로 묶어낸 형태로 활용이 가능하지만, 윈도우 함수는 개별 결과를 해당 행에 그대로 나타낼 수 있다. 도식화를 하면, 작업순서는 GROUP BY, HAVING절 다음이며 SELECT절 바로 전이다. 윈도우 함수(Window Function)의 구문 - .. 2022. 10. 18.