본문 바로가기

MySQL35

[MySQL] 그룹별로 column 데이터 이어 붙이기 (GROUP_CONCAT) https://leetcode.com/problems/group-sold-products-by-the-date/ Group Sold Products By The Date - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 위 문제를 풀면서 알게 된 점 정리 일단 문자열을 붙일 때는 CONCAT, CONCAT_WS 들을 많이 사용함 CONCAT은 문자열 그대로 붙이는 거고 CONCAT_WS는 구분자 두는 것 그룹별로 데이터를 이어 붙일 땐 GROUP_CONCAT을 .. 2022. 5. 4.
[MySQL] SUM + CASE WHEN + GROUP BY 처리 https://leetcode.com/problems/capital-gainloss/ 위 문제를 풀고 내용 정리 주식 별로 얼마나 손익을 봤는지 계산하는 문제 처음엔 GROUP BY stock_name, operation 이렇게 묶고 SELECT 한번 더 해서 나중에 처리하려고 했는데 뭔가 잘 되지 않았다. SUM 안에 CASE WHEN을 넣어서 처리하면 깔끔하게 풀이할 수 있다. # Write your MySQL query statement below SELECT stock_name, SUM( CASE WHEN operation = 'Buy' THEN -price ELSE price END ) AS capital_gain_loss FROM Stocks GROUP BY stock_name ; 2022. 4. 20.
[LeetCode] Sales Analysis III (최소 최대 GROUP BY MINMAX 활용) https://leetcode.com/problems/sales-analysis-iii/ 그렇게 어려운 문제는 아니지만 여러 풀이 방법이 있었다. 처음 생각한 단순한 풀이 SELECT product_id, product_name FROM Product WHERE product_id IN( SELECT product_id FROM Sales WHERE sale_date BETWEEN '2019-01-01' AND '2019-03-31' ) AND product_id NOT IN( SELECT product_id FROM Sales WHERE sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31' ) ; 딱 봐도 뭔가 비효율적이다. GROUP BY + HAVING SEL.. 2022. 4. 5.
[MySQL] COUNT(1), COUNT(*), COUNT(column) 차이 MySQL에서 COUNT(1)과 COUNT(*)의 차이에 대해서 알아봤다. 결론은 COUNT(1)과 COUNT(*) 차이가 없다. COUNT(*)는 NULL 값을 포함하는지 여부에 관계없이 검색된 행 수의 카운트를 반환 COUNT(1), COUNT(0), COUNT(-2312312313) 모두 똑같이 동작함 https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_count MySQL :: MySQL 8.0 Reference Manual :: 12.20.1 Aggregate Function Descriptions MySQL 8.0 Reference Manual / ... / Functions and Operators / Aggre.. 2022. 4. 5.
[MySQL] 사칙연산 + 형 변환 https://leetcode.com/problems/not-boring-movies/submissions/ Not Boring Movies - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 위 문제를 풀면서 사칙연산하는 것 정리 위 문제는 나머지를 구하는 문제다. MOD(X, Y) X를 Y로 나눈 나머지 SELECT id, movie, description, rating FROM Cinema WHERE MOD(id, 2) = 1 AND description '.. 2022. 4. 3.
[LeetCode] Tree Node https://leetcode.com/problems/tree-node/ Tree인지 Inner 인지 Leaf인지 확인하는 문제 SQL 문에서 CASE WHEN 사용하고 조건문을 작성시 서브쿼리를 사용하면 깔끔하게 풀이 가능 SELECT id, CASE WHEN p_id is NULL THEN 'Root' WHEN id IN (SELECT p_id FROM tree) THEN 'Inner' ELSE 'Leaf' END AS type FROM Tree order by id ; 2022. 4. 3.
[MySQL] DATE 타입으로 변경 DATE_FORMAT 코테에서 DATE_FORMAT이 생각이 안났다. DATE따로 FORMAT 따로 생각났다. 공부가 많이 부족하다고 느꼈다 정리를 해보자. DATETIME은 YYYY-MM-DD hh:mm:ss의 형식을 가진다 이를 수정하려면 DATE_FORMAT이 필요하다. DATE 타입은 YYYY-MM-DD의 형식을 가진다. 아마 가장 많이 사용되리라 생각하는 DATETIME에서 DATE로 변환하는 방법은 아래와 같다. -- 현재시간 SELECT NOW(); -- 2022-04-02 11:11:37 -- 변환 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); -- 2022-04-02 -- YY 형식 SELECT DATE_FORMAT(NOW(), '%y-%m-%d'); -- 22-04-02 Specifi.. 2022. 4. 2.
[프로그래머스] 입양 시각 구하기(2) (MySQL) https://programmers.co.kr/learn/courses/30/lessons/59413 코딩테스트 연습 - 입양 시각 구하기(2) ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 programmers.co.kr 로컬 변수를 선언해야 한다. 몰라서 검색해서 찾았다. (이런 방법이 있었다니) SET @HOUR := -1; SELECT (@HOUR := @HOUR + 1) AS HOUR, (SELECT COUNT(HOUR(DATETIME)) FROM ANIMAL_OUTS W.. 2021. 11. 17.
[프로그래머스] 우유와 요거트가 담긴 장바구니 (MySQL) https://programmers.co.kr/learn/courses/30/lessons/62284 코딩테스트 연습 - 우유와 요거트가 담긴 장바구니 CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가 programmers.co.kr SELF JOIN 을 통해 해결했다. 답은 나오긴 했지만 상당히 비효율 적인 것 같아서 다른 풀이를 찾아봤다. SELECT DISTINCT C1.CART_ID FROM CART_PRODUCTS C1 JOIN CART_PRODUCTS C2 ON C1.CART_ID = C2.CART_I.. 2021. 11. 16.
[프로그래머스] 헤비 유저가 소유한 장소 (MySQL) https://programmers.co.kr/learn/courses/30/lessons/77487 코딩테스트 연습 - 헤비 유저가 소유한 장소 PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 programmers.co.kr 서브쿼리를 활용한다. IN , EXISTS EXISTS가 좀 더 효율적 IN 사용 SELECT ID, NAME, HOST_ID FROM PLACES WHERE HOST_ID IN (SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(HOST_ID) >=2) ORDE.. 2021. 11. 16.
[프로그래머스] DATETIME에서 DATE로 형 변환 (MySQL) https://programmers.co.kr/learn/courses/30/lessons/59414 코딩테스트 연습 - DATETIME에서 DATE로 형 변환 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr DATE_FORMAT을 통해 자유자제로 변환 가능 SELECT ANIMAL_ID, NAME, DATE_FORMAT(datetime, '%Y-%m-%d') AS 날짜 FROM ANIMAL_INS ORDER BY ANIMAL_ID 2021. 11. 16.
[프로그래머스] 오랜 기간 보호한 동물 (2) (MySQL) https://programmers.co.kr/learn/courses/30/lessons/59411 코딩테스트 연습 - 오랜 기간 보호한 동물(2) ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 될까..? 했는데 됐다. SELECT INS.ANIMAL_ID, INS.NAME FROM ANIMAL_INS INS JOIN ANIMAL_OUTS OUTS ON INS.ANIMAL_ID = OUTS.ANIMAL_ID ORDER BY (OUTS.. 2021. 11. 16.
[프로그래머스] 중성화 여부 파악하기 (MySQL) https://programmers.co.kr/learn/courses/30/lessons/59409 코딩테스트 연습 - 중성화 여부 파악하기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr CASE WHEN 구문을 통해 생성한다. SELECT ANIMAL_ID, NAME, CASE WHEN SEX_UPON_INTAKE LIKE 'Intact%' THEN 'X' ELSE 'O' END AS 중성화 FROM ANIMAL_INS ORDER .. 2021. 11. 16.
[프로그래머스] 이름에 el이 들어가는 동물 찾기 (MySQL) https://programmers.co.kr/learn/courses/30/lessons/59047 코딩테스트 연습 - 이름에 el이 들어가는 동물 찾기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr UPPER or LOWER를 사용하면 된다. SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE ANIMAL_TYPE = 'Dog' and UPPER(NAME) LIKE UPPER('%EL%') order b.. 2021. 11. 16.
[프로그래머스] 루시와 엘라 찾기 (MySQL) https://programmers.co.kr/learn/courses/30/lessons/59046 코딩테스트 연습 - 루시와 엘라 찾기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr IN을 활용해서 풀었다. SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') O.. 2021. 11. 16.