본문 바로가기

분류 전체보기

[SQL 예문] 브랜드별 판매수량, 금액 구하기 (feat. JOIN) 우리 회사 DB 구조 상, 브랜드별 판매수량, 금액을 추출하기 위해서는 세 테이블을 조인 해야한다. ITEM 테이블 , CART 테이블, ORDER 테이블 왜 이렇게 세개가 필요하냐면, CART 와 ORDER 테이블엔 BRAND 명 칼럼이 없음 ORDER 테이블엔 주문번호별 총주문금액은 있어도 한 주문번호 안에 어떤 상품들을 담았는지는 없음 그건 CART테이블에 데이터 존재 ITEM 테이블에 BRAND 명 칼럼 존재. CART 테이블에 상품별 판매수량, 금액 칼럼 존재 ORDER 테이블에 주문번호 (od_id), 결제일시 (od_receipt_time) 칼럼 존재 우선 ORDER 테이블과 CART 테이블을 주문번호 (od_id) 를 key 로 해서 JOIN 한다. 이렇게 JOIN 한 결과와 ITEM 테이.. 2022. 3. 18.
[SQL 함수] RANK() OVER (Partition by _ Order by _ ) 그룹핑 한 후 순위를 매겨주는 함수 SELECT RANK( ) OVER ( PARTITION BY 그룹핑할 칼럼 ORDER BY 정렬할 칼럼 ) FROM 테이블명 ( ORDER BY 정렬할 칼럼 DESC or ASC or 생략하면 ASC가 디폴트값 ) 이 긴 함수가 한 세트~ PARTITION BY 에 지정한 칼럼 기준으로 그룹핑 해주고 ORDER BY 에 지정한 칼럼 기준으로 정렬해준담에 RANK 행 마다 순위를 매겨준다 ROW_NUMBER() OVER (Partition by _ Order by _) 와의 차이점은 ROW_NUMBER( ) : 1등이 2명이어도 1등, 2등으로 나눔 RANK( ) : 1등이 2명이면 그 다음 순위는 3등으로 매김 예시 쿼리문 ) SELECT s.ip, s.session.. 2022. 3. 14.
[SQL 함수] ROW_NUMBER() OVER (Partition by _ Order by _ ) 그룹핑 한 후 순번을 매겨주는 함수 SELECT ROW_NUMBER( ) OVER ( PARTITION BY 그룹핑할 칼럼 ORDER BY 정렬할 칼럼 ) FROM 테이블명 ( ORDER BY 정렬할 칼럼 DESC or ASC or 생략하면 ASC가 디폴트값 ) 이 긴 함수가 한 세트~ PARTITION BY 에 지정한 칼럼 기준으로 그룹핑 해주고 ORDER BY 에 지정한 칼럼 기준으로 정렬해준담에 ROW_NUMBER 행 마다 순서를 매겨준다 예를 들어 아래 왼쪽 테이블을 오른쪽 테이블 같이 그룹핑, 정렬 해주고 싶으면 이렇게 함수를 작성하면 된다. ROW_NUMBER( ) OVER (PARTITION BY '멤버 아이디' ORDER BY '주문한 날짜') 실무에 사용되는 쿼리문을 통해 한번 더 확인해.. 2022. 3. 11.
[AWS Redshift SQL] DATEDIFF 함수 _ 날짜 차이 구하기 DATEDIFF 함수는 두 날짜 또는 시간 표현식에서 날짜 부분의 차이점을 반환한다. 구문 DATEDIFF ( datepart, {date|time|timetz|timestamp}, {date|time|time|timestamp} ) 차이나는지 구하고 싶을 때 DATEDIFF ( day, 날짜, 날짜 ) 예 ) DATEDIFF ( day, '2021-01-01', '2021-01-02' ) -> 1일 차이나기 때문에 결과는 1 차이나는지 구하고 싶을 때 DATEDIFF ( week, '2021-01-01', '2021-12-31' ) -> 결과는 52 차이나는지 구하고 싶을 때 DATEDIFF ( qtr, '1998-07-01',.. 2022. 3. 8.
[AWS] 데이터 아키텍처 (RDS, S3, GLUE, ATHENA, REDSHIFT) 내가 보려고 정리하는 우리 회사 AWS 데이터 아키텍처 사업 본부별 다른 DBMS 쓰다가 최근에 데이터 통합을 추진하면서, AWS 서비스를 사용한 데이터웨어하우스를 구축하는 중이다. (AWS는 단순한 웹페이지가 아니라 클라우드 컴퓨팅 환경이다.) 위의 아키텍처에서 필요한대로 점점 더 추가될 수 있다. 하나씩 기능을 살펴보자 RDS (Relational Database Service) Category : DB 관리형 관계형 데이터베이스 MySQL, PostgreSQL, Oracle Database, SQL Server,MariaDB, Amazon Aurora 중에 선택해서 데이터베이스를 생성할 수 있다. 클라우드에서 관계형 데이터베이스를 간편하게 설정, 운영 및 확장 가능 S3 (Simple Storage.. 2022. 3. 8.
[AWS Redshift SQL] 숫자 세 자리 마다 콤마(,) 찍기 / 소수점 자릿수 맞추기 (ft. TO_CHAR) AWS Redshift 에서 123,444,000 처럼 숫자 세자리 수 마다 콤마 찍어주는 방법 MySQL 에서는 FORMAT 함수로 되지만 Redshift 에서는 FORMAT 함수 지원 안해줌.. TO_CHAR 함수 사용하면 할 수 있다. SELECT TO_CHAR ( 컬럼명 , '999,999,999,999' ) FROM 테이블명 999,999 는 출력 될 예상 수치 보다 큰 숫자로 입력해야 잘 적용 됨으로 일단 큰 숫자로 설정하는게 좋다 ex) SELECT TO_CHAR ( 주문금액, '999,999,999,999,999' ) FROM shop_order 소수점 자리도 몇자리까지만 출력되게 할 .. 2022. 3. 7.
[AWS] Redshift 는 PostgreSQL을 기반으로 한다 Amazon Redshift는 PostgreSQL을 기반으로 한다. 따라서 MySQL 에서는 사용 가능한 함수고, 잘 돌아가는 쿼리문인데 Redshift 에서는 오류가 나는 경우들도 있다. 어떤 함수들의 경우 MySQL 에서 사용가능한데 Redshift 에서는 사용 불가능하다. 또, 아무리 Amazon Redshift 기반이 PostgreSQL 라고 해도 Amazon Redshift SQL 과 PostgreSQL 에는 차이가 있다. Amazon Redshift SQL 에서 모든 PostgreSQL 의 함수와 기능을 제공하는 것은 아니라는 것이다. 아래 공식문서에 자세히 나와있다. https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/c_redshift-and-po.. 2022. 3. 4.
[구글 스프레드시트] ? 이스케이프 하기 / 특수문자 검색하기 (ft. isnumber, search) 본론부터 얘기하자면 ? 를 이스케이프 하기 위해서 앞에 붙이면 되는 기호는 ~ 물결 기호이다. 아래 캡쳐본을 보면 A2 셀에 문자에 물음표 기호가 포함 되어 있는지, 없는지 여부에 따라서 TRUE, FALSE 를 출력하고자 함수를 작성했는데 물음표가 있으나 없으나 TRUE 를 출력한다. =isnumber(search("?",A2)) 물음표 기호를 그냥 일반 문자로 인식 되도록 ? 앞에 ~ 물결 기호를 붙여서 ? 를 이스케이프 해줘야 된다. =isnumber(search("~?",A2)) ~ 붙여서 ? 를 일반 문자로 인식하게끔 해주니 결과가 잘 나온다. 참고 ) ISNUMBER , SEARCH SEARCH 함수는 찾고자 하는 단어가 있으면 발견된 위치의 숫자를 반환하고 찾고자 하는 단어가 없으면 #VAL.. 2022. 3. 4.
[구글 스프레드시트] 특정 단어 포함된 행들 출력하기 (ft. Filter 함수) 구글 스프레드시트에서 특정 단어가 포함되는 행들만 출력하고 싶을 땐 FILTER 함수 + REGEXMATCH 함수 두가지를 중첩해서 쓰면 된다 FILTER 함수 사용법 REGEXMATCH 함수는 텍스트 일부가 정규표현식과 일치하는지 TRUE, FALSE 로 여부 알려주는 함수다 바로 활용해 보자 아래 캡쳐본에 B2 셀에 입력한 함수다. =FILTER(A:A,REGEXMATCH(A:A,"acne|Acne|ACNE")) A:A 범위에 있는 모든 셀들 중에 acne or Acne or ACNE 를 포함한 단어들만 출력 하라는 의미이다. FILTER 함수가, REGEXMATCH 결과가 TRUE 인 행들만 출력해 준것이다. acne 이 단어만 포함된 행들만 출력하고 싶다면 =FILTER(A:A,REGEXMATCH.. 2022. 3. 4.
[SQL예문] 신규주문 / 재주문 회원수 구하기 (ft. CASE WHEN , 서브쿼리) 주문 테이블에서 일정 기간 동안 신규주문 회원수와 재주문 회원수를 구하고 싶다. 신규주문과 재주문 구분은 해당 아이디의 주문 횟수가 1이면 신규주문 해당 아이디의 주문 횟수가 1초과 이면 재주문 으로 구분한다. CASE WHEN 구문 CASE WHEN COUNT(mb_id) = 1 THEN '신규주문' WHEN COUNT(mb_id) > 1 THEN '재주문' ELSE '-' END 이 CASE WHEN 구문을 SELECT 문에 하나의 칼럼으로 넣을 것이다. 우선 회원아이디로 group by 해서 회원별 주문횟수, 주문총금액을 구한다. IN ( ) 함수 사용법은 1 THEN '재주문' ELSE '-' END) AS 주문유형 FROM shop_order WHERE od_time BETWEEN '2022-0.. 2022. 3. 3.
[SQL예문] 월별 / 일별 주문 수 추출하기 (feat. SUBSTRING) 월별 주문 수 추출하기 우선, 주문관련 데이터가 누적되는 shop_order 테이블에 어떤 컬럼들이 있는지 살펴본다. SELECT * FROM 주문테이블 여러 컬럼들 중 주문번호, 주문날짜 및 시간, 주문 상태 이 세 칼럼이 필요할 것 같다. 월별 주문 수 추출 쿼리문 SUBSTRING 함수 사용법👀 월별 주문수 구하기 위해 월별로 GROUP BY 가 필요! 날짜 및 시간 컬럼에서 yy-mm 까지만 잘라서 사용! (SUBSTRING 함수로) SUBSTRING (od_receipt_time,1,7) AS "YY-MM" ㄴ od_receipt_time 컬럼에서 1번째 문자열부터 7개까지만 사용하겠다. 이 컬럼명은 yy-mm 으로 명명 한다. COUNT(od_id) AS od_count ㄴ od_id 주문번호.. 2022. 2. 25.
[알고리즘] 선형탐색 , 이진탐색 (feat. 파이썬, 시간복잡도) 탐색 : 저장된 정보들 중에서 원하는 값을 찾는 것 예) 리스트에 숫자들이 뒤죽박죽 나열되어 있는데 그 중 '5' 라는 숫자가 어디에 있는지 찾는 것 탐색의 2가지 방법 : 선형탐색(Linear Search), 이진탐색(Binary Search) 선형 탐색 알고리즘 (linear search algorithm) 리스트의 처음부터 끝까지 순서대로 하나씩 탐색을 진행하는 알고리즘 이진 탐색 알고리즘 (binary search algorithm) 정렬된 리스트에서 중간값이랑 비교해보고 반씩 제외하면서 찾는 것 1. '선형 탐색(Linear Search)' 알고리즘을 사용해서 어떤 원소가 리스트 안에 포함되어 있는지 확인하기 * for 문 사용 def linear_search(target,some_list): .. 2022. 2. 18.
파일, 폴더(디렉토리) 다루는 커맨드 - pwd, cd, ls, mkdir, touch 이번 글에서는 pwd, cd, ls, mkdir, touch 커맨드의 사용법과 예시를 설명하겠습니다. cat, less, head, tail, mv, cp, rm 커맨드는 아래에서 확인해보세요! 👉파일, 폴더(디렉토리) 다루는 커맨드 - cat, less, head, tail, mv, cp, rm👈 컴퓨터에 있는 파일과 폴더를 다루는 중요한 커맨드 pwd, cd, ls 사용법을 알아보자. 유닉스 운영체제에서는 폴더를 디렉토리 라고 한다. 디렉토리를 다루려면 유닉스 디렉토리 구조를 알아야한다. 유닉스 디렉토리 구조는 거꾸로 된 나무와 같다 맨 위에 root 가 있고 그 밑으로 디렉토리들이 뻗어 나간다. 사용자의 홈 디렉토리가 중요한데 사용자의 홈 디렉토리는 Linux는 root 안에 home 안에 있고 m.. 2022. 2. 7.
유닉스 커맨드 기본기 (터미널 사용 꿀팁_ 방향키 이동 등) 커맨드를 입력해서 컴퓨터를 사용하는 환경을 command line interface (CLI)환경이라고 한다. CLI 환경을 이용할 때, 인풋을 받고 아웃풋을 출력해 주는 프로그램을 터미널이이라고 한다. 터미널은 쉽게 말해 커맨드를 입력하는 '검은 화면' mac 에서는 터미널을 사용하면 되고 window 에서는 ubuntu를 다운 받아서 사용. Ubuntu 커맨드를 사용할 때는 커맨드 이름만 쓸 때도 있지만 아규먼트(argument)와 옵션(option)을 주어야 할 때도 있다. 아규먼트는 커맨드를 어느 대상에 대해 실행할 것인지를 정하는 것이고, 옵션은 커맨드를 어떻게 실행할 것인지를 정해 준다. ex) 터미널에 date 커맨드를 입력하면 현재 시간이 출력되고, cal 커맨드를 입력하면 이번 달 달력이.. 2022. 2. 6.
정규화 (1NF, 2NF, 3NF) / 비정규화 정규화 (Normalization) 데이터베이스의 테이블이 잘 만들어졌는지 평가하고, 잘 만들지 못한 테이블을 고쳐나가는 과정. 테이블을 정규형(normal form)이라고 불리는 형태에 부합하게 만들어나감. 정규화가 필요한 이유? 정규형에 부합하지 않는 테이블들은 삽입, 업데이트, 삭제 이상 현상들이 생기는 등 문제점들이 많기 때문. 정규형(Normal Form) 1NF -> 2NF -> 3NF 순서에 따라 규칙이 누적된다 2NF 는 1NF의 조건을 지키면서 2NF 에 해당되는 규칙도 지켜야되고 3NF 는 2NF의 조건을 지키면서 3NF 에 해당되는 규칙도 지켜야한다. 1NF : 나눌 수 없는 단일 값 테이블이 1NF에 부합하기 위해서는 안에 있는 모든 값들이 나눌 수 없는 단일 값 이어야 한다. 아래.. 2022. 2. 5.
카디널리티 (feat. ERM) 카디널리티 카디널리티는 두 entity type 사이 관계에서 한 종류의 entity가 다른 종류의 entity 몇 개에 대해서 관계를 맺을 수 있는지를 나타내는 개념이다. 1:1 일대일 1:N 일대다 M:N 다대다 이렇게 3가지 관계가 있다. 1:1 관계 일대일 관계는 A entity 하나가 B entity 하나에만 연결될 수 있고, 마찬가지로 B entity 하나도 A entity 하나에만 연결될 수 있는 관계를 의미 한다. 1:1 관계의 예는 법적 부부 관계, 시민과 주민등록증 관계가 있다. 1:N 관계 일대다 관계는 A entity 하나가 B entity 여러 개에 연결될 수 있고, 반대로 B entity는 A entity 하나에만 연결될 수 있는 관계를 의미한다. 1:N 관계로는 쇼핑몰 사이트에.. 2022. 2. 5.
데이터 모델 종류 (릴레이셔널 모델, ERM) 데이터 모델 데이터 모델이란, 다양한 데이터 요소들을 이해하고 사용하기 편한 형태로 정리해놓은 모형을 의미한다. 우리가 데이터를 저장하려고 하는 대상 : Entity(개체) Entity에 대해서 저장하려고 하는 특징 : Attribute(속성) Entity들 사이 생기는 연결점 : Relationship(관계) 여러 데이터 요소들에 있는 규칙 : Constraint(제약 조건) 이 네 가지 요소들을 파악한 후, 이 내용들을 발전시켜 데이터 모델들을 만드는 과정을 데이터 모델링이라고 부른다. 릴레이셔널 모델 우리에게 가장 익숙하고 가장 널리 사용되는 모델은 릴레이셔널 모델이다. 릴레이션은 데이터를 로우와 컬럼으로 정리한 테이블, 또는 표를 의미한다. Entity는 테이블, attribute은 컬럼, rel.. 2022. 2. 4.
[MySQL] ALTER TABLE (ADD, DROP, RENAME,MODIFY) 컬럼추가 하기 (ALTER TABLE , ADD) student 테이블에 칼럼을 하나 추가해 보자 테이블에 `컬럼` 추가하려면 ALTER TABLE 테이블이름 ADD 컬럼이름 데이터타입 속성 ALTER TABLE student ADD gender CHAR(1) NULL; DESC student; #student 테이블 정보 보기 결과 화면 > 컬럼명 바꾸기 (ALTER TABLE , RENAME COLUMN TO) 컬럼명을 바꿔보자 student_number -> registration_number ALTER TABLE 테이블이름 RENAME COLUMN 기존 컬럼명 TO 새로운 컬럼명; ALTER TABLE student RENAME COLUMN student_number TO registration_.. 2022. 2. 3.
[MySQL] 테이블 컬럼 정보 보기 DESCRIBE (DESC) 테이블 컬럼 정보를 한 눈에 보여주는 DESCRIBE 이런식으로 해당 테이블의 컬럼 구조, 각 컬럼의 데이터 타입, 속성을 볼 수 있다. Field : 컬럼의 이름 Type : 컬럼의 데이터 타입 Null : 컬럼의 Null 속성 유무 Key : Primary Key, Unique 속성 여부 Default : 컬럼의 기본값 Extra : AUTO_INCREMENT 등의 기타 속성 DESCRIBE를 DESC라고 줄여서 써도 된다. 2022. 2. 3.
[MySQL] 테이블 컬럼 값 생성, 수정, 삭제 (CREATE, UPDATE, DELETE) animal_info 라는 테이블 생성하기 id : Primary Key로 사용할 컬럼, 데이터 타입 : INT AUTO_INCREMENT 속성 주기 type : 동물 종류(사자, 코끼리 등), 데이터 타입 : VARCHAR, 최대 길이 : 30자 name : 동물 이름(리오, 조이 등), 데이터 타입 : VARCHAR, 최대 길이 : 10자 age : 나이, 데이터 타입 : TINYINT sex : 성별, 데이터 타입 : CHAR, 최대 길이 : 1자 weight : 몸무게, 데이터 타입 : DOUBLE feature : 특징 묘사, 데이터 타입 : VARCHAR, 최대 길이 : 500자 entry_date : 동물원에 들어온 날짜, 데이터 타입 : DATE feature .. 2022. 2. 3.
[MySQL] 데이터베이스 컬럼의 데이터타입 컬럼의 데이터타입 (datatype) 사용할 수 있는 데이터 타입은 DBMS마다 조금씩 차이가 있다. MySQL의 데이터 타입들을 살펴보자. MySQL의 데이터 타입은 일반적으로 세 가지 카테고리로 분류할 수 있다. Numeric types(숫자형 타입) Date and Time types(날짜 및 시간 타입) String types(문자열 타입) 1. Numeric types(숫자형 타입) 숫자를 나타내기 위해서 사용되는 데이터 타입. 숫자형 타입은 다시 정수형 타입과 실수형 타입으로 나눌 수 있는다. (1) 정수형 타입 말 그대로 정수값을 저장하는 타입. 여기에 해당하는 타입들은 그것이 나타낼 수 있는 정수값의 범위에 차이가 있다. 1) TINYINT : 작은 범위의 정수들을 저장할 때 쓰는 데이터 .. 2022. 2. 2.
[MySQL] 데이터베이스 생성하기 (아래 나오는 화면들은 Workbench 화면들 입니다) (Workbench : MySQL 워크벤치는 SQL 개발과 관리, 데이터베이스 설계, 생성 그리고 유지를 위한 단일 개발 통합 환경을 제공하는 비주얼 데이터베이스 설계 도구) 새로운 데이터 베이스 생성 명령문 CREATE DATABASE 데이터베이스 이름이 기 존재하지 않는 경우에 이 이름으로 생성하라 CREATE DATABASE IF NOT EXISTS DB이름 ; 데이터 베이스를 지정한 후에 테이블 만들기 버튼 클릭 USE 테이블 만들 데이터베이스 이름; 실행 후 테이블 생성 버튼 클릭 Table Name 을 지정 여기선 student 로 지정함 아래 Column Name 빨간네모 박스친 부분 처럼 빈 곳 더블클릭하면 Column Name 지정.. 2022. 2. 2.
[MySQL] Join (LEFT, RIGHT, INNER) / UNION LEFT OUTER JOIN (= LEFT JOIN) 왼쪽 테이블 기준으로 오른쪽 테이블을 합침 SELECT i.id, i.name, s.item_id, s.inventory_count FROM item AS i LEFT OUTER JOIN stock AS s #테이블에 alias 붙여줌 ON i.id = s.item_id #테이블 조인 조건 조인할 때는 SQL 문이 길어지기 때문에 테이블 이름에 alias를 붙여주는 게 좋다. RIGHT OUTER JOIN (= RIGHT JOIN) 오른쪽 테이블 기준으로 왼쪽 테이블을 합침 SELECT i.id, i.name, s.item_id, s.inventory_count FROM item AS i RIGHT OUTER JOIN stock AS s #테이블에 a.. 2022. 2. 1.
[MySQL] 뷰 (VIEW) 만들기 뷰 : 조인 등의 작업을 해서 만든 '결과 테이블' 이 가상으로 저장된 형태 일시적으로 생성한 결과 테이블을 저장해둔 것 뷰(VIEW)는 가상테이블이라고도 한다. #AS 뒤에 나오는 쿼리문의 결과 테이블을 VIEW 로 저장하라 CREATE VIEW three_tables_joined AS SELECT i.id, i.name, AVG(star) AS avg_star, COUNT(*) AS count_star FROM item AS i LEFT OUTER JOIN review AS r ON r.item_id = i.id LEFT OUTER JOIN member AS m ON r.mem_id = m.id WHERE m.gender = 'f' GROUP BY i.id, i.name HAVING COUNT(*) .. 2022. 2. 1.
728x90
반응형
LIST