brickstudy / AlgorithmsGround

Algorithms Ground
0 stars 0 forks source link

[Share] SQL 코딩테스트 팁 공유 #9

Open robert-min opened 3 months ago

robert-min commented 3 months ago

주제

SQL 알고리즘 문제를 풀면서 시간 복잡도 최적화 또는 이 외의 여러 확인한 팁들을 이슈로 공유

방식

정해진 양식은 없고 편하게 Comment로 의견 추가!!

robert-min commented 3 months ago

length vs char_length

Q. 영어의 경우 length, char_length 모두 동일한데 어떤걸 사용하면 좋을까?

-- length : 635ms
SELECT tweet_id FROM Tweets
WHERE (
    length(content) > 15
)

-- char_length : 476ms
select tweet_id from Tweets
where (
    char_length(content) > 15;
)

참고. SQL 시간 테스트

-- 대량의 행을 포함하는 테이블 생성
CREATE TABLE test_strings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    str VARCHAR(255)
);

-- 대량의 행 삽입
INSERT INTO test_strings (str)
SELECT REPEAT('a', 100)
FROM information_schema.columns
LIMIT 100000;

-- LENGTH의 실행 시간 측정
SET @start_time = NOW();
SELECT AVG(LENGTH(str)) FROM test_strings;
SELECT TIMESTAMPDIFF(SECOND, @start_time, NOW()) AS length_time;

-- CHAR_LENGTH의 실행 시간 측정
SET @start_time = NOW();
SELECT AVG(CHAR_LENGTH(str)) FROM test_strings;
SELECT TIMESTAMPDIFF(SECOND, @start_time, NOW()) AS char_length_time;
robert-min commented 3 months ago

LAG vs LEAD : 이전 후 행 값 비교

스크린샷 2024-06-19 오전 7 50 39

예시 문제 : 197. Rising Temperature 링크


SELECT
    t.id
FROM (
    SELECT id,
        recordDate,
        temperature,
        LAG(recordDate, 1) OVER (ORDER BY recordDate) AS Prev_date,
        LAG(temperature, 1) OVER (ORDER BY recordDate) AS before_temperature
    FROM Weather
) AS t
WHERE t.recordDate = date_add(t.Prev_date,INTERVAL 1 DAY)
    AND t.temperature > before_temperature