[TIL]W2D3

stella·2021년 8월 15일
0

count

SELECT channel_id,COUNT(1)
FROM prod.session
GROUP BY 1;
SELECT
 LEFT(created, 7) AS mon,-> created에서 7글자만 추출(년-월)
 COUNT(1) AS session_count
FROM prod.session
GROUP BY 1 (==) GROUP BY mon, GROUP BY LEFT(created, 7)
ORDER BY 1
  • GROUP BY 1은 SELECT시 첫 필드값으로 묶는 것을 나타냄(여기서는 channel_id)!!
  • COUNT(1)(==count(*)와 같은 의미)
  • COUNT(null)이 아닌 이상 모두 똑같이 동작한다.
  • 만약에 SELECT COUNT(distinct value) 이라면 중복하지 않은 value값을 count한다!!

Case when

SELECT channel_id, 
CASE
 WHEN channel_id in (1, 5, 6) THEN 'Social-Media'
 WHEN channel_id in (2, 4) THEN 'Search-Engine'
 ELSE 'Something-Else'
END channel_type
FROM prod.session;
  • CASE WHEN~: channel_id 의 조건에 맞춰서
  • END channel_type: channel_type라는 필드를 만든다.

NULL이란

값이 존재하지 않음을 나타내는 상수-> 0,""과 다름

  • 필드에 값이 없는 경우 null로 설정가능하다.
    (-> default 값을 지정해 놓아 값이 존재 하지 않을때 null이 아니라 default 값으로 지정되는 경우도 있다.)

  • null은 !=,==아니고 is NULL, is not NULL써야한다.(맨날 실수 했던것)

  • NULL의 사칙연산 결과는 NULL이다-> 값이 없기 때문에!!!

  • count(null)이면 count하지 않는다 (결과는 0으로 나온다!!!)

Q. 이러한 테이블에서 null인 레코드들을 찾고 싶을때

만약에 다음과 같이 실행한다면

select * from ys_alert where vistal_id=null

다음과 같은 결과가 나온다.

is null을 통해 해결한다

select * from ys_alert where vistal_id is null

in

  • 만약 WHEN channel_id in (1, 5, 6) THEN 'Social-Media'이라면
    ->channel_id가 1 or 5 or 6일때를 말한다.
  • 만약 Where channel_id in(3,4)이면 channel_id가 3나 4인 케이스를 찾아달라는 조건문이다!!

like

  • 대소문자 구별없이 문자열 매칭기능 제공한다.

  • where channel_id like %u-> u로 끝나는 것들을 찾는 조건문

  • where channel_id like %o%-> o가 들어가는 것들을 찾는 조건문

  • not like -> like아닌 것들(여집합 느낌??)

string function

  • LEFT(str, N): str필드에서 왼쪽에서 n글자 가져오기
  • REPLACE(str, exp1, exp2): str필드에서 exp1을 exp2로 바꿔주기
  • UPPER(str): 대문자로 바꿔주기
  • LOWER(str): 소문자로 바꿔주기
  • LENGTH(str): 길이 구해주기
  • LPAD, RPAD(str,15,'_"): (왼쪽/오른쪽)에 - 15개패딩해주기
  • SUBSTRING
  • CONCAT

order by

  • order by 1 desc 2,3 : 1번째 필드값이 같으면 2번째 필드로 정렬, 그것도 같으면 3번째 필드으로 정렬
  • null 값이 포함되어있는 경우:(오름차순) null값이 처음 /(내림차순) null값이 마지막

타입변환

DATE Conversion:

  • NOW : 현재시간

  • 타임존 관련 변환
    CONVERT_TZ(now(), 'GMT', 'Asia/Seoul')

  • DATE, WEEK, MONTH, YEAR, HOUR, MINUTE, SECOND, QUARTER, MONTHNAME

  • DATEDIFF: Day 기준으로 날짜끼리 빼는 연산

  • DATE_ADD(date,interval 10 day)-> date에 10일더하기

  • STR_TO_DATE('01.5.2013','%d,%m,%Y') DATE_FORMAT
    :2013-05-01으로 포맷하기

type casting

  • cast(c as float)->c를 float로 변경해라
    ==convert(a,float)

  • c=1/2이라면 float캐스팅하여 0.5 나타낸다.

profile
뚠뚠뚠..

0개의 댓글