Leetcode 12

SQL - 텍스트 관련 함수, window function

리트코드 솔루션을 필사하면서 새롭게 알게된 함수와 기능들입니다. 텍스트 관련 함수 : regexp_substr, regexp_replaceregexp_substr : 문장 속에서 특정 문자로 시작하는 단어를 찾을 때 사용합니다.오라클과 mysql 등에서 사용 가능 regexp_substr(문자열, 정규표현식, [시작위치, 찾은 횟수, 대소문자 구분, 그룹 순번]) 문장 속에서 해시태그를 찾는 경우, regexp_substr(tweet, "#[^\\s]+") 로 표현할 수 있음regexp_replace : 정규표현식과 일치하는 문자열을 다른 문자로 바꿀 때 사용합니다.오라클과 mysql 등에서 사용 가능regexp_replace(문자열, 정규표현식, 치환 문자열, 검색 시작 위치, 매칭 순번, 일치 옵션)..

Data/SQL 2024.06.02

SQL - 문자열 포함 여부 검색, least/greatest, 검색 범위 갱신

리트코드 SQL 문제를 풀면서 유용하게 사용했던 함수 및 기능들입니다. (#1384 ~ #2199) 문자열 포함 여부 검색특정 컬럼의 내용이 다른 테이블의 컬럼 내용과 일치하는지 확인할 때는 조인 조건을 변형해야 합니다.검색 대상이 되는 컬럼을 A 테이블의 content 라 하고, 검색어가 되는 컬럼을 B 테이블의 word라고 가정한다면 검색 쿼리는 다음과 같습니다.select *from A left join Bon concat(' ', lower(a.content), ' ') like concat('%', lower(b.word), '%')lower를 이용하여 content 컬럼의 내용을 전부 소문자로 변환한 뒤, concat으로 앞뒤에 공백을 더해줍니다.word 컬럼의 내용도 소문자로 변환한 뒤, 앞..

Data/SQL 2024.05.08

[리트코드] SQL - #601, #262, #1393, #1613

601. Human Traffic of Stadium hard 난이도 문제입니다. Q. 3개 이상의 연속적인 id와 100명 이상의 사람이 방문한 id를 찾아라. 날짜 기준, 오름차순으로 정렬 풀이 with문을 사용해서 id에서 id 기준 row_number를 뺀 값, 즉 id_diff를 계산합니다. 이때, 100명 이상의 사람이 방문할 것을 조건으로 설정합니다. with 문을 사용해야하기 때문에 mysql 대신 ms sql server를 사용했습니다. id_diff가 변하지 않고 동일하다면 연속되는 숫자라고 볼 수 있습니다. 따라서 view를 생성한 뒤에는 id_diff 기준 count가 3개인 행을 필터링합니다. with temp as ( select *, id - row_number() over(o..

Data/SQL 2024.04.21

[리트코드] SQL - medium 문제 풀이(#177, #178, #184, #1158, #1393)

SQL 50 섹션에는 포함되지 않지만 sql 쿼리 문제에 해당하는 데이터베이스 문제들입니다. 그 중에서도 medium 난이도만 풀어보겠습니다. #177 Nth Highest Salary n을 입력받고, n번째로 높은 연봉을 반환하는 쿼리를 작성해야 합니다. 사용자 정의 함수를 연습해볼 수 있는 문제입니다. CREATE FUNCTION getNthHighestSalary(N INT) -- 1 RETURNS INT -- 2 BEGIN declare answer int; -- 3 set answer = N-1; -- 4 RETURN ( -- 5 select distinct salary from employee order by salary desc limit answer, 1); END 1 : 함수 이름(get..

Data/SQL 2024.03.14

리트코드 프리미엄 사용 후기(+ Advanced SQL)

SQL을 연습하려고 한달 정도 리트코드 프리미엄을 결제해서 사용했습니다.오늘은 리트코드 프리미엄과 advanced SQL 후기를 간단하게 남겨보려고 합니다.한달 구독 비용은 35$ 입니다. 저는 오랫동안 구독하지는 않을 것 같아서 연간이 아닌 월간으로 결제했습니다.현재 연간 구독 비용 할인 행사를 하고 있는 것 같은데, 연간 구독 생각이 있으시다면 확인해보시는 것도 좋을 것 같습니다. 가장 유용하게 사용한 기능은 editorial입니다.editorial은 리트코드 측에서 제공하는 솔루션이라고 생각하시면 됩니다.다만 메모리와 시간 측면에서 가장 좋은 솔루션은 아닙니다. 베이직하게 접근하는 솔루션의 느낌이에요.모든 문제에 editorial이 제공되는 건 아니고, 아래 그림처럼 solution이라고 적힌 문제..

Data/SQL 2023.11.28

SQL 코딩테스트 웹사이트별 후기(프로그래머스/solvesql/hackerrank/leetcode)

오늘은 SQL 연습 사이트별 후기를 남겨보려고 합니다. 평가 기준은 난이도, 문제 개수, 문제 퀄리티, 기타 부가기능으로 구성되어 있습니다. 프로그래머스 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr가장 먼저 접한 사이트입니다. 한국 사이트이기 때문에 문제가 한국어로 출제되고, 모든 문제가 무료입니다.난이도 ★★☆☆☆ 소개한 사이트 중 가장 난이도가 쉽습니다. sql을 처음 공부하시는 분들께는 적합한 것 같아요문제 개수 : 약 70문제문제 퀄리티 : ★★★★☆기타 부가기능 : [질문하기] 기능으로 다른 유저와 소통 가능 SolveSQL https://solv..

Data/SQL 2023.11.05

[리트코드] SQL 50 - Advanced String Functions / Regex / Clause 문제 풀이(# 1484, # 176, # 196)

mysql을 사용합니다 # 1484 Group Sold Products By The Date group_concat 이라는 함수를 처음 사용해봤어요 Q. 날짜별로 팔린 물건의 종류와 개수를 나타내어라. 물건은 알파벳 순으로 정렬하고, 전체 데이터는 날짜 순으로 정렬하여라 풀이 key : group_concat group by : sell_date 기준으로 그룹화 sell_date 기준으로 자동 정렬이 되기 때문에 order by를 사용할 필요가 없습니다 group_concat : 문자열 사이에 쉼표가 붙습니다. 중복되는 문자열을 제거하기 위해 distinct를 사용합니다 알파벳 순 정렬을 위해 order by를 사용합니다 시간 : 820 ms 메모리 : 0b select sell_date, count(d..

Data/SQL 2023.10.26

[리트코드] SQL 50 - Subqueries 문제 풀이(# 626, # 1321, # 585)

mysql을 사용합니다. hard 난이도 문제는 생각보다 쉽게 풀려서 따로 풀이하지 않았습니다. # 626 Exchange Seats 쿼리의 길이는 짧지만, 체감 난이도가 높은 편이었습니다. Q. 연속된 id를 가진 학생의 자리를 바꾸어라. 학생의 수가 홀수일 경우, 마지막 id의 학생은 자리를 바꾸지 않는다. 풀이 key : case when, subquery case when id가 홀수이면서 마지막에 위치한 경우, id를 그대로 출력한다 id가 짝수인 경우 id에서 1을 뺀다 id가 홀수이지만 마지막에 위치하지 않은 경우 id에서 1을 더한다 subquery : 마지막에 위치한 id를 확인하기 위해 학생의 수를 센다 정렬 : 새로 계산한 id 순으로 정렬한다 시간 : 905 ms 메모리 : 0b s..

Data/SQL 2023.10.20

[리트코드] SQL 50 - Advanced Select and Joins 문제 풀이(# 1789, # 180, # 1164)

mysql을 사용합니다. # 1789 Primary Department for Each Employee easy 난이도입니다. 쿼리 작성 자체는 어렵지 않지만 runtime이 안 좋게 나와서 다시 푼 문제입니다. Q. 각 직원의 직원 번호와 주요 부서의 부서 번호를 표시하라. 풀이 key : sub query 서브쿼리 : 하나의 부서에만 소속된 직원의 직원 번호를 추출합니다. 이후 where 절에서 사용합니다. 시간 : 1214ms (수정 이전 1597ms) 메모리 : 0b select employee_id, department_id from Employee where primary_flag = 'Y' or employee_id in ( select employee_id from Employee grou..

Data/SQL 2023.10.16

[리트코드] SQL 50 - Sorting and Grouping 문제 풀이(# 1141, # 1070, # 1045)

mysql을 사용합니다 # 1141 User Activity for the Past 30 Days I easy 난이도이지만 날짜 조건을 연습해볼 수 있는 문제이기 때문에 가져왔습니다. Q. 2019년 7월 27일까지 약 한달 간의 일일 active user 수를 구하여라 풀이 key : sub query, datediff 서브쿼리 active date가 2019년 7월 27일보다 이전이고, 날짜의 차이가 1달인 데이터를 저장합니다 날짜를 기준으로 group by 함으로써 일일 active user를 구합니다 시간 : 790 ms 메모리 : 0b select a.activity_date as day, count(distinct a.user_id) as active_users from (select * fr..

Data/SQL 2023.10.12
반응형