Data/SQL 22

[Presto] 실무에서 자주 사용하는 함수 및 기능

where 조건특정 문자열을 포함하거나, 특정 문자로 시작/끝나는 경우 : regexp_likesyntax : regexp_like(column, '문자열')정규식은 사용 가능하지만, like에서 사용하던 %는 사용 불가능name 컬럼에서 book를 포함하는 행을 찾고 싶은 경우 : regexp_like(name, 'book')name 컬럼에서 book으로 시작하는 행을 찾고 싶은 경우 : regexp_like(name, '^book')name 컬럼에서 book으로 끝나는 행을 찾고 싶은 경우 : regexp_like(name, 'book$')name 컬럼에서 book으로 시작하고 story로 끝나는 행을 찾고 싶은 경우 : regexp_like(name, '^book.+story$')name 컬럼에서 ..

Data/SQL 2024.11.06

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 - 날짜 관련 함수, 텍스트 관련 함수, window function

오늘은 리트코드의 SQL 문제를 풀면서 새롭게 알게 된 함수 몇 가지를 포스팅해보려고 합니다. #2993 부터 #3089 까지 풀었습니다. 날짜 관련 : weekofyear, weekofday, date_add 각각 주차와 요일을 계산할 때 사용합니다. weekofyear(날짜) : 해당 날짜의 주차를 반환합니다. 연 기준이기 때문에 1부터 53까지의 수를 반환합니다. 해당 날짜가 특정 월에서 차지하는 주차를 알고 싶다면 아래와 같이 계산할 수 있습니다. weekofyear(구하려는 날짜) - weekofyear(해당 날짜의 월초) + 1 weekday(날짜) : 해당 날짜의 요일을 숫자로 반환합니다. 0 = 월요일 1 = 화요일 2 = 수요일 3 = 목요일 4 = 금요일 5 = 토요일 6 = 일요일 d..

Data/SQL 2024.04.23

[리트코드] 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

SQL 정규표현식 with 해커랭크 문제 풀이

봐도봐도 헷갈리는 sql 정규표현식 문법 정리할 겸 포스팅을 해보겠습니다. 정규표현식 기본적인 정규표현식은 아래와 같습니다. 표현식 의미 abc 알파벳 123 숫자 \d 어떤 숫자라도 상관없음 \D 어떤 숫자가 아닌 문자도 상관없음 \w 어떤 알파벳이라도 상관없음 \W 어떤 알파벳이 아닌 문자라도 상관없음 \s 어떤 공백이라도 상관없음 \S 어떤 공백이 아닌 문자라도 상관없음 . 무엇이든 \. 점 [abc] a,b,c 중 하나 [^abc] a,b,c 중 어느 것도 아닌 것 [a-z] a부터 z까지 [0-9] 0부터 9까지 반복에 관련된 정규표현식은 다음과 같습니다. 표현식 의미 {m} m번 반복 {m,n} m~n번 반복 * 0번 이상 반복 + 1번 이상 반복 ? 옵션(필수X) 문자열의 모든 패턴이 아닌 ..

Data/SQL 2024.03.11

[해커랭크] SQL certification 취득 후기

지금까지 거의 모든 사이트의 sql 문제를 풀어보았습니다.sql을 연습할 수 있는 다른 방법이 없을까 찾다가 해커랭크의 certification을 취득해보기로 했어요오늘은 3개의 certification을 취득한 후기를 올려보려고 합니다. Basic가장 낮은 단계인 basic입니다.제한 시간 : 30분 / 2문제서브쿼리 및 조건문을 사용해야하는 가벼운 문제약 10분 소요 Intermediate중간 단계 intermediate입니다.제한 시간 : 35분 / 2문제첫 번째 문제는 basic과 비슷한 난이도두 번째 문제는 테이블이 많이 나와서 어려웠어요. 테이블 간 관계를 정리하며 푸시면 좋을 것 같습니다.제한 시간 안에 문제를 다 풀지 못해서 자동으로 제출되었어요. 그런데도 합격이 뜬 걸 보면 제출만 하면 ..

Data/SQL 2024.02.01

[해커랭크] SQL(hard) - 15 Days of Learning SQL 문제 풀이

MS SQL Server를 사용합니다. 테이블 간 관계와 문제가 요구하는 output은 이미지와 같습니다. 유의사항 mysql의 경우, with 구문을 사용할 수 없습니다 : 해커랭크에서는 8.0 이하 버전을 지원합니다. 각 날짜에 최소 1번 이상 submission한 해커란, 기준일자까지 매일매일 submission한 해커를 말합니다. description만 보고서는 이 부분을 제대로 이해하기 어려웠습니다. 이것 때문에 시간을 많이 잡아먹었네요 인라인 뷰 생성(with) with cte as ( select s.hacker_id, h.name, s.submission_date, count(*) as submissions from submissions s left join hackers h on s.ha..

Data/SQL 2024.01.16

[해커랭크] SQL(hard) - Interviews 문제 풀이

MS SQL Server를 사용합니다. 테이블 간 관계와 문제가 요구하는 output은 이미지와 같습니다. 유의사항 mysql의 경우, with 구문을 사용할 수 없습니다 : 해커랭크에서는 8.0 이하 버전을 지원합니다. discussion에서 많이 언급된 질문 컬럼 순서를 맞춰야 정답으로 인정됩니다 : contest_id, hacker_id, name, and the sums of total_submissions, total_accepted_submissions, total_views, and total_unique_views 합계 컬럼 순서에 주의할 것 group by - sum을 두 번 사용할 것 : 인라인 뷰와 메인쿼리에서 모두 사용해야 합니다. 이유는 하단에 기재해두었습니다! discussion..

Data/SQL 2024.01.09
반응형