SQL 20

[프로그래머스] [MySQL] [LV.4] 우유와 요거트가 담긴 장바구니

CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블이다. 데이터 분석 팀에서는 우유와 요거트를 동시에 구입한 장바구니가 있는지 알아보려 한다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL문을 작성하라는 문제! SELECT * FROM CART_PRODUCTS WHERE 1=1 AND NAME = 'MILK' AND NAME = 'YOGURT 처음에 그냥 바로 요거를 생각했는데 역시나 오답. 레벨 4가 이렇게 쉬울리 없지,, 서브쿼리로 해봤는데도 도통 모르겠어서 질문하기에서 다른사람들이 어떻게 풀었는지 찾아보았다. GROUP_CONCAT이라는 함수와 정규표현식(REGEXP)을 이용해서 풀었더라 GROUP_CONCAT 예를 들어 음식 테이블이 있다고 생각해 보자 ..

SQL 2024.01.15

[HackerRank] [MySQL] Weather Observation Station 15

Query the Western Longitude(LONG_W) for the largest Northern Latitude(LAT_N) in STATION that is less than 137.2345. Round your answer to 4 demical places. 여기서 깨알상식 : demical place는 소수점, longitude는 경도, latitude는 위도라는 뜻이다! 사실 예전의 나였다면 아 서브쿼리써야하나 하고 막 썼다가 지웠을테지만 보다 성장한 나는 보자마자 'lat_n 내림차순 정렬하고 limit걸면 되겠구나' 하고 생각했다. SELECT ROUND(LONG_W, 4) FROM STATION WHERE LAT_N < 137.2345 ORDER BY LAT_N DESC LIM..

SQL 2024.01.12

[MySQL] MOD 함수로 짝수/홀수 찾기

HackerRank를 풀다가 홀수와 짝수를 구하는 문제가 있었다. 문제를 절대 찾기 귀찮아서 문법만 정리하는게 아니다 ㅎㅎ python에서 코딩할때 짝수나 홀수를 구할때는 2로 나눠서 0이나오면 짝수 아니면 홀수 이런식으로 코딩을 했었는데 mysql에는 그런 귀찮음을 덜어주는 좋은 함수가 있었다. MOD 함수 짝수 SELECT * FROM DUAL WHERE MOD(NUMBER, 2) = 0 홀수 SELECT * FROM DUAL WHERE MOD(NUMBER, 2) = 1 이렇게 하면 아주 간단하게 홀수와 짝수를 찾을 수 있다! 음 적고나니 if(x%2==1): print("홀수") 가 빠른거같기도,,,

SQL 2024.01.11

[HackerRank] [MySQL] Weather Observation Station 6

이번엔 해커스랭크라는 새로운 사이트! Query the list of CITY names starting with vowels (i.e., a, e, i, o, u) from STATION. Your result cannot contain duplicates. 해석안해줘도 다 알거라 생각하지만 친절히 해석을 해주자면 station 테이블에서 첫번째글자가 a, e, i, o, u로 시작하는 도시의 이름을 쿼리로 작성하라는 문제. 여기서 도시의 이름은 중복이 되면 안된다! (깨알정보: vowel은 모음이다.) 처음보는 테이블! 처음에 where city like 'a%' 이런식으로 했다가 나중에 LEFT함수로 바꿨다. SELECT DISTINCT(CITY) FROM STATION WHERE LEFT(CITY..

SQL 2024.01.10

[프로그래머스] [MySQL] LV.3 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (CONCAT, SUBQUERY, JOIN)

어김없이 나온 USED_GOODS_BOARD 중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고거래 게시판 첨부파일 정보를 담은 USED_GOODS_FILE 테이블. USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성하라는 문제이다. 첨부파일 경로는 FILE_ID를 기준으로 내림차순 정렬, 기본적인 파일경로는 /home/grep/src/ 이며, 게시글ID를 기준으로 디렉토리가 구분되고 파일이름은 파일ID, 파일이름, 파일 확장자로 구성되도록 출력, 조회수가 가장 높은 게시물은 하나만 존재. 역시나 서브쿼리를 써야한다는 감이 바로 왔다. 우선 조회수가 가장 높은 중고거래 게시물을 봐..

SQL 2024.01.04

[프로그래머스] [MySQL] LV.3 헤비 유저가 소유한 장소 (SUBQUERY)

이번 문제는 아예 처음보는 새로운 PLACES 테이블. PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블이다. 이 서비스에서 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부르는데 이 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성하라는 문제. 문제를 보자마자 '아 서브쿼리인가' 하는 감이 왔다. 그래서 '공간을 둘 이상 등록한 헤비유저가 등록한 공간의 정보' 를 먼저 작성하였다. 서브쿼리 SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(HOST_ID) >= 2) 이제 저 쿼리를 WHERE절의 서브쿼리로 사용하여 쿼리를 마저 작성하였다. SELECT * FROM PLACES WHERE HOST_ID ..

SQL 2024.01.04

[프로그래머스] [MySQL] LV.3 조건에 맞는 사용자 정보 조회하기 (CONCAT, SUBSTR)

중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 첨부파일 정보를 담은 USED_GOODS_USERS 테이블. 이 게시판들에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 전체 주소, 전화번호를 조회하는 SQL문을 작성하라는 문제이다! 이때 주소는 시, 도로명 주소, 상세 주소가 함께 출력되게 하고, 전화번호는 000-0000-0000의 형태로 하이픈을 삽입하도록 해야한다 SELECT U.USER_ID ,U.NICKNAME ,전체주소 ,전화번호 FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID ORDER BY U.USER_ID DESC SELECT문 작성하기전에..

SQL 2024.01.03

[프로그래머스] [MySQL] LV.3 없어진 기록 찾기 (EXCLUSIVE JOIN)

많이 나왔던 ANIMAL_INS과 ANIMAL_OUTS테이블을 사용한 문제! 천재지변으로 인해 일부 데이터가 유실되었다. 입양을 간 기록은 있는데 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성하라는 문제이다. 슥 보고 어 뭐 어려운거 아니네 하면서 스근하게 쿼리를 작성 해 나갔다. SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE 1=1 AND O.DATETIME IS NOT NULL AND I.DATETIME IS NULL ORDER BY I.ANIMAL_ID 코드를 실행해 보니 값이 나오질 않았다. 음 뭐지,, 맞는거같은데 하..

SQL 2024.01.02

[프로그래머스] [MySQL] LV.3 조건에 맞는 사용자와 총 거래금액 조회하기 (HAVING)

중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 사용자 정보를 담은 USED_GOODS_USERS 테이블. 이 두 테이블에서 완료된 중고 거래의 총 금액이 70만원 이상인 사람의 회원ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성하라는 문제! 우선 조인을 하려고 보니 어라라 똑같은 칼럼이름이 없네?? 다행히도 밑에 예시를 보니 USED_GOODS_BOARD의 WRITER_ID와 USED_GOODS_USER의 USER_ID가 동일해서 그걸로 묶어서 JOIN을 진행해 주었다. SELECT U.USER_ID ,U.NICKNAME ,SUM(B.PRICE) AS TOTAL_SALES FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USE..

SQL 2024.01.02