목록코드카타 (186)
susinlee 님의 블로그
[문제]https://datalemur.com/questions/sql-top-three-salaries [풀이]RANK() : 동일한 값이 있을 경우, 같은 순위를 부여하고 다음 순위를 건너뜀 (1, 1, 3, 4 ...)DENSE_RANK() : 동일한 값이 있을 경우 같은 순위를 부여하지만, 다음 순위를 건너뛰지 않음 (1, 1, 2, 3 ...)ROW_NUMBER() : 동일한 값이 있어도 무조건 순차적으로 증가 (고유한 순위) 1. 두 테이블을 병합한 후 랭크함수를 사용하여 부서별로 급여 순으로 랭크를 매겨준다.2. 랭크를 통해 상위 3명만 필터링한다. [코드]SELECT department_name , name , salaryFROM( SELECT e.name , d.depa..
[문제]https://datalemur.com/questions/teams-power-users Microsoft SQL Interview Question | DataLemurMicrosoft SQL Interview Question: Write a query to retrieve the top 2 Power Users who sent the highest number of messages.datalemur.com [풀이]- 날짜를 비교할 때 TO_CHAR()를 이용하여 'YYYY-MM' 형식 변환 및 비교가 가능- TO_DATE(컬럼명, 'MM/DD/YYYY') 을 통해 'YYYY-MM-DD' 형태로 변환할 수 있음 (DATE타입으로 변경)1. 2022-08에 메세지를 보낸 직원을 필터링한다2. 직원 ..
[문제]https://datalemur.com/questions/sql-average-post-hiatus-1 Average Post Hiatus | Facebook SQL Interview QuestionFacebook SQL Interview Question: Write a query to obtain days between users first and last post in 2021.datalemur.com [풀이]PostgreSQL 에서 날짜 차이를 구하려면 AGE() 함수 또는 날자 뺄셈(-) 연산자를 사용하면 된다.1. 21년에 작성한 user_id만 필터링해서2. user_id 별로 최근 작성날짜와 첫 작성날짜를 빼준다 [코드]SELECT user_id , MAX(post_date)::..
[문제]https://datalemur.com/questions/sql-page-with-no-likes [풀이]1. 두 테이블에서 page_id를 선택하고2. EXCEPT 연산자를 통해 차집합을 구해준다 PostgreSQL 코드SELECT page_idFROM pagesEXCEPTSELECT page_idFROM page_likes
문제https://datalemur.com/questions/sql-histogram-tweets 해결1. 22년도 필터링 후 유저별로 트윗 개수를 세어준다2. 트윗 개수별로 유저 수를 세어준다. PostgreSQLSELECT tweet_bucket , COUNT(user_id) AS users_numFROM( SELECT user_id , COUNT(tweet_id) AS tweet_bucket FROM tweets -- WHERE EXTRACT(YEAR FROM tweet_date) = '2022' WHERE tweet_date BETWEEN '2022-01-01' AND '2022-12-31' GROUP BY user_id) subGROUP BY tweet_bucket
[문제]https://leetcode.com/problems/department-top-three-salaries/description/ [풀이]1. 부서 테이블과 병합한 후2. 부서별로 salary의 순위를 계산한다. 이때 dense 옵션으로 1, 2, 2, 3 처럼 숫자의 누락이 없게, 같은 값은 같은 수위로 배정한다.3. 순위가 4보다 작은 애들만 필터링한다. Pandasimport pandas as pddef top_three_salaries(employee: pd.DataFrame, department: pd.DataFrame) -> pd.DataFrame: department = department.rename(columns={'id': 'departmentId', 'name': 'dep..
[문제]https://leetcode.com/problems/investments-in-2016/description/ [풀이]1. tiv_2015가 중복인 행들의 pid을 추출해서 dup 리스트 생성2. lat과 lon이 중복인 행들을 제거3. 제거된 데이터프레임에서 pid이 dup 리스트에 포함된 행들만 필터링4. tiv_2016의 합계를 구해서 제출 Pandasimport pandas as pddef find_investments(insurance: pd.DataFrame) -> pd.DataFrame: dup = insurance[insurance.duplicated('tiv_2015', keep=False)].pid pos = insurance.drop_duplicates(subse..
[문제]https://leetcode.com/problems/friend-requests-ii-who-has-the-most-friends/description/ [풀이]1. requester_id 열과 accepter_id 열을 위 아래로 합쳐준다.2. 합친 열을 그룹화하고 개수를 센다음 정렬한 뒤 제일 첫 번째 행을 가져온다. Pandasimport pandas as pddef most_friends(request_accepted: pd.DataFrame) -> pd.DataFrame: df = pd.DataFrame({ 'id': pd.concat([request_accepted['requester_id'], request_accepted['accepter_id']]) }) ..