MySQL
-
[MySQL] 그룹별로 순위매기기 (DENSE_RANK)MySQL 2025. 1. 15. 14:14
특정 기준을 가지고 행의 순위를 매겨야할때 사용한다 // 해당 컬럼의 값이 동일값이면 같은 순위로 배정한다. // 그 후 다음 순위의 값은 그 전 같은 순위의 갯수만큼 제외하고 시작한다.RANK() OVER (ORDER BY salary DESC)RANK() OVER (ORDER BY salary ASC)// RANK()랑 동일하게 해당 컬럼의 값이 동일값이면 같은 순위로 배정한다.// 단, 다음순위의 값은 이전 순위 중복값의 갯수랑 상관없이 다음 순서로 이어진다.DENSE_RANK() OVER (ORDER BY salary DESC)DENSE_RANK() OVER (ORDER BY salary ASC)[RANK + 그룹별로 묶을 필요가 없을때] 그룹별로 묶을 필요가 없고(PARTITION 사용할 필요가..
-
[MySQL] SET으로 사용자 변수 추가하기MySQL 2025. 1. 15. 12:18
https://school.programmers.co.kr/learn/courses/30/lessons/59413 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krSET @HOUR = -1;SELECT @HOUR := @HOUR + 1 AS HOUR, (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNTFROM ANIMAL_OUTSWHERE @HOUR
-
[MySQL] 3중 JOINMySQL 2025. 1. 7. 13:08
https://school.programmers.co.kr/learn/courses/30/lessons/132204 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr SELECT a.APNT_NO, p.PT_NAME, p.PT_NO, a.MCDP_CD, d.DR_NAME, a.APNT_YMDFROM APPOINTMENT AS aJOIN DOCTOR AS dON a.MDDR_ID = d.DR_IDJOIN PATIENT AS pON a.PT_NO = p.PT_NOWHERE DATE(a.APNT_YMD) = '2022-04-13'AND a.MCDP_CD = 'CS'AND a.APNT_CNCL_YN = 'N'OR..
-
[MySQL] MATH 연산MySQL 2024. 11. 4. 17:27
[ROUND : 반올림] 이거 두 번째 인자 ㅈㄴ 중요함. 일단 ㅈㄴ 헷갈림SELECT ROUND(11.54619, 1) -- 11.5SELECT ROUND(11.54619, 2) -- 11.55SELECT ROUND(11.54619, 3) -- 11.5461SELECT ROUND(11.54619, 4) -- 11.5462 두번째 인자 한 칸 뒤에서 반올림해서두번째 인자 칸까지만 나타내겠다는거임 [TRUNCATE : 버릴 자릿수 아래로 버림] [CEILING : 무조건 올림]SELECT CEILING(21.35) -- 22 SELECT CEILING(21.9) -- 22 소수점 이하를 무조건 올리는 역할결과는 정수 [FLOOR : 무조건 내림]SELECT CEILING(21.35) -- 21 SELECT..
-
[MySQL] 조건문 쿼리MySQL 2024. 10. 21. 20:45
[IF 문] [CASE WHEN]CASE WHEN 조건1 THEN 조건1 충족할 때 반환되는 값 WHEN 조건2 THEN 조건2 충족할 때 반환되는 값 WHEN 조건3 THEN 조건3 충족할 때 반환되는 값 ELSE 모든 조건 해당되지 않을 때 반환되는 값END AS 칼럼명 조건에 따라 특정 값을 출력하고 싶을때 사용 1. 새로운 칼럼을 만들 수 있다2. 기존 값에 따른 새로운 값을 출력할 수 있다3. GROUP BY 와 같이 사용가능하다GROUP BY의 기준칼럼이 아니더라도 CASE WHEN 절 내에서 조건문으로 사용할 수 있다 https://school.programmers.co.kr/learn/courses/30/lessons/284528 프로그래머스SW개발자를 위한 평가, 교..
-
[MySQL] JOIN 연산MySQL 2024. 10. 19. 03:36
1. CROSS JOIN2. INNER JOIN3. OUTER JOIN (LEFT/RIGHT)[CROSS JOIN] 각 테이블의 모든 행이 다른 테이블의 모든 행과 조합됨Cartesian Product를 내놓음총 결과 행 수 = a개수 * b개수 * c개수 ~~ *n개수 SELECT *FROM a,b,c;SELECT *FROM aCROSS JOIN bCROSS JOIN c; INNER JOIN(JOIN) 하고 ON 조건절이 없으면 CROSS JOIN으로 취급됨[INNER JOIN]default가 INNER JOIN임가장 보편적인 JOIN-ON 으로 사용하는 JOIN 문그냥 JOIN만 하면 INNER JOIN으로 해석한다만약 JOIN만 하고 ON을 안쓰면 CROSS JOIN으로 Cartesian Produ..
-
[MySQL] 비트연산MySQL 2024. 10. 4. 00:37
이건 DB 설계할때도 굉장히 도움이 될 내용이다 만약 피파 선수의 특성을 카테고리로 나눈다면 다음과 같이 나눌 수 있다 예감 1 = 1강뚝 2 = 10승부욕 4 = 100텍드 8 = 1000 그럼 만약 예감이랑 승부욕을 갖고 있는 선수를 찾으려면 어떻게 하면 될까? 해당 선수의 특성값과 0101 을 & 비트연산을 통해서 계산해주면 되는 것이다이렇게 이진수를 사용함으로써 각 타입에 대한 원자성을 확보하여비트연산을 통해 성능과 공간복잡도를 살린 db를 설계할 수 있다 그리고 그에 따른 쿼리 성능도 굉장히 좋아진다 https://school.programmers.co.kr/learn/courses/30/lessons/276035 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개..
-
[MySQL] CHAR VARCHAR TEXTMySQL 2024. 10. 1. 01:13
[CHAR] 고정형 글자를 한개를 넣든 두개를 넣든 항상 8바이트의 공간을 차지 그래서 INSERT나 UPDATE가 일어나면 일단 DB에 밀어넣고 남는 부분을 공백으로 채움 [VARCHAR(VARIABLE CHAR)] 가변형 글자를 한개 넣으면 1바이트, 2개를 넣으면 2바이트로 바뀌어서 저장됨 즉 공간을 필요한 만큼만 차지하게 만들어줌 즉 VARCHAR은 INSERT나 UPDATE가 있을때 현재 자신이 차지하고 있는 영역이 얼마인지 확인하고 부족한 경우 더 할당하고 남으면 줄여서 INSERT 함. [TEXT] 가변형길이 제한이 없다 [CHAR VS VARCHAR?] 차이점 CHAR의 경우 데이터가 낭비될 수 있지만 추후 연산이 필요없기 때문에 검색속도 및 읽히는 속도가 VARCHAR에 비해 빠르..