mysql 문제풀이 30

Leetcode 262 - Trips and Users

https://leetcode.com/problems/trips-and-users/description/ 습득한 점: SUM함수의 새로운 표현법을 알 수 있었다. 이제 까진 주로 숫자에 대한 계산을 위해 SUM(price*moment) 의 정도로 활용해왔지만, 이번 문제 풀이를 통해, 컬럼 내 존재하는 특정 문자열 데이터의 갯수를 아래 표현과 처럼 셀 수도 있었다. SUM(status != 'completed') >>> status 컬럼 중 "completed"가 아닌 데이터의 총 갯수 COUNT(status) >>> status 컬럼의 데이터 갯수 총합 문제: The cancellation rate is computed by dividing the number of canceled (by client ..

프로그래머스 Lv 3 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

https://school.programmers.co.kr/learn/courses/30/lessons/157340 습득한 점: 레벨 3문제지만, 코드 길이에 관계없이 지금까지 풀었던 문제중에서 가장 까다로웠고, 깨닫게 된 점이 많았다. 문제를 마주하면 이해하기 좋은 코드 작성하고자, 반복적으로 필요하지 않고 해당 함수가 꼭 필요하지 않음에도, With 구문을 습관적으로 활용해서 문제를 풀곤 했었다. 덕분에 이해하기는 편했으나, 코드 줄 수가 너무 길어지는 단점이 있었다. 결과적으론... 이해하는 것이 코드를 작성한 나만 쉽지 않을까? 생각들었다. DA가 sql 코드 성능을 신경 쓸 필요는 별로 없겠지만, 그래도 기존에 해왔던 파이썬이나 자바처럼 좀 더 컴팩트하게 작성하면 좋지 않을까? 앞으로는 가독성도..

프로그래머스 Lv 4 - 보호소에서 중성화한 동물 (Lv 4 문제 마지막)

https://school.programmers.co.kr/learn/courses/30/lessons/59045 습득한 점: WHERE ~ IN () 처럼, LIKE IN () 도 가능할까 싶었는데, 불가능했다. 대신 아래처럼 AND를 전체로 묶은 뒤, 안쪽을 OR로 엮어줄 수는 있었다. ... WHERE SEX_UPON_INTAKE LIKE 'Intact%' AND (SEX_UPON_OUTCOME LIKE 'Spayed%' OR SEX_UPON_OUTCOME LIKE 'Neutered%') ... 문제: 보호소에 들어올 당시에는 중성화1되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 쿼리 작성. 즉, 들어올 땐, 중성화X, 나갈땐 중성..

프로그래머스 Lv 4 - 식품분류별 가장 비싼 식품의 정보 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/131116 습득한점: *** LIMIT은 서브쿼리에 들어가면 쿼리 실행자체가 안된다는 점 *** GROUP BY된 상태로 SELECT 함수 인자로 MAX func 활용할 때, 각 그룹의 첫번째 값이 끌려올 뿐, MAX func가 적용되지 않는 점 문제: FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 쿼리작성. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력. 결과는 식품 가격을 기준으로 내림차순 정렬. 문제파악: 각 카테고리(식품분류)에서 최대값을 나타내는 식품명(PRODUCT_NAME)을 찾아야 하는데, '면' 그룹내 P..

프로그래머스 Lv 3 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

습득한점: 조회수의 최대값을 찾아야 할 때, 나는 당연히 최대값을 찾고, BOARD_ID를 MAX(VIEW) 를 SELECT 문에 함께 붙이면, RDBMS이기에 자동으로 조회수가 최대값인 로우의 BOARD_ID를 뽑아낼 수 있을 줄 알았지만 아니었다. 그렇게 친절하지는 않은 듯 하다. MAXVIEW는 MAXVIEW대로나오고,1줄짜리 row이니, 나머지 데이터들은 전체데이터의 첫번째열을 반환하는 것 같았다. mysql의 새로운 특성을 파악했다. 문제: USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 쿼리 작성. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬 기본적인 파일경로는 /home/grep/src/ 이..

프로그래머스 Lv 4 - 5월 식품들의 총매출 조회하기

습득한 점: 이제 Lv 4 문제도 3문제정도 밖에 남지 않아서, 벌써부터 난이도가 쉬워지고 있다. 그동안 5 난이도 부터 역순으로 문제풀어서, 3 난이도 문제 차례인데, 정답률 80%이하 인 것들만 풀어야 할듯 하다. 더불어, 윈도우 함수(LEAD, LAG, RANK, DENSE_RANK, ROW_NUMBER 등등) 혹은 사용자 정의 함수를 활용하는 문제가 프로그래머스에는 없는 듯해서, 3 난이도를 다 풀고나면 리트코드나 해커랭크 문제를 풀어야 할 것 같다. 아니면 Data Camp 라는 곳도 알아봐야겠다. (유료라 들었는데) 문제: FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 쿼리 작성 결과는 총매출을 기준으로 ..

프로그래머스 Lv 4 - 서울에 위치한 식당 목록 출력하기

습득한 점: 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 쿼리를 작성하는 것이니 조회되는 쿼리는 모두 서울에 위치한 식당이어야 하고, 예상되는 테이블 형태는 아래와 같으므로 (적기만 하면 되는 컬럼은 제외했음) 문제에서는 식당 이름에 대해서 그룹화 하란 말이 없었지만, 결국은 식당 별 리뷰 평균을 구하는 것과 같다. 고로, 문제에서 ~~~ 그룹 별 이라는 말이 없어도, 문제에서 원하는 테이블 형태를 예상해서 원하는 컬럼에 GROUP BY 를 붙여 계산해도 된다. 식당 이름 리뷰 점수 >>> 식당이름 리뷰평균 a 4.5 >>> a 4.50 b 3 >>> b 3.33 b 4 >>> c 3.50 b 3 >>> c 3 >>> c 4 >>> 문제: R..

프로그래머스 Lv 4 - 년, 월, 성별 별 상품 구매 회원 수 구하기

습득한 점: 이전에는 테이블을 보이는데로 조인했다면, 지금은 테이블이 조인되었을 때의 형태를 머릿속으로 고려하면서 쿼리를 구성할 수 있게되었다. 문제: USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 쿼리문 작성 결과는 년, 월, 성별을 기준으로 오름차순 정렬. 이때, 성별 정보가 없는 경우 결과에서 제외. 문제파악: 크게 어려워 보이는 부분은 없었다. 다만 "동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나에 판매 데이터만 존재한다" 이 언급만 조금 더 고려하면 되었다. ONLINE_SALE만을 볼때, 날짜, 회원ID, 상품ID 조합에 대해서는 고유의 판매데이터만 존재한다고 했지만, ONLINE_SALE 테이블과 USER_INFO..

프로그래머스 Lv 4 - 취소되지 않은 진료 예약 조회하기

링크: https://school.programmers.co.kr/learn/courses/30/lessons/132204 습득한 점: 예시로 주어진 테이블을 반드시 보면서, 문제에서 주어진 말들을 오해하지 않고 빠르게 풀어야 겠다. 쉬워보인다고 해서 보지 않으면, 이렇게 쉬운 문제임에도 오히려 시간을 소모 할수 있다. 다음은 환자 정보를 담은 PATIENT 테이블과 의사 정보를 담은 DOCTOR 테이블, 그리고 진료 예약목록을 담은 APPOINTMENT에 대한 테이블입니다. PATIENT 테이블은 다음과 같으며 PT_NO, PT_NAME, GEND_CD, AGE, TLNO는 각각 환자번호, 환자이름, 성별코드, 나이, 전화번호를 의미합니다. PT_NO VARCHAR(N) FALSE PT_NAME VAR..

프로그래머스 Lv 4 - 주문량이 많은 아이스크림들 조회하기

링크: https://gooreumwave.tistory.com/43 습득한 점: 단순히 코드를 붙여넣기 하기보단 문제를 풀기 위해 생각했었던 중간과정을 기록해보는 것이 나중에 다시 복습할 때, 좋을 것 같음. 또한 다음부턴 쿼리 작성 시간도 카운트 해보면 좋을 것 같다. (쿼리 작성 속도가 점점 더 빨라지는 것 같아서 다행이다) 문제: 문제파악: JULY 테이블의 strawberry 값이 2개 값으로 표출되어 FLAVOR 컬럼 기준으로 누적합 함수를 쓰면 풀 수 있지 않을까 했지만, 순간의 착각이었다. FLAVOR 컬럼을 기준으로 누적합이 생성되는 것을 확인했다... 즉, JULY 테이블에서 한가지 맛을 거듭할때마다 아래 예시 처럼 CUM_SUM 컬럼에 누적합이 더해졌었다. ex) SHIPMENT_ID..