ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024-01-30
    스파르타/TIL(Today I Learned) 2024. 1. 30. 23:03
    더보기

    SQL 코드카타

     

    Revising Aggregations - The Sum Function(SQL)(간단)

    Revising Aggregations - The Sum Function | HackerRank

    지역구가 캘리포니아인 CITY의 모든 도시의 총인구를 조회하는 문제이다

    SELECT SUM(c.population)
    FROM city c
    WHERE c.district = 'California'
    

     

    Revising Aggregations - Averages(SQL)(간단)

    Revising Aggregations - Averages | HackerRank

    지역구가 캘리포니아인 CITY의 모든 도시의 평균 인구를 조회하는 문제이다

    SELECT AVG(c.population)
    FROM city c
    WHERE c.district = 'California'
    

     

    Average Population(SQL)(간단)

    Average Population | HackerRank

    모든 도시의 평균 인구를 한자리수까지 반올림하여 표시하는 문제이다.

    SELECT ROUND(AVG(c.population))
    FROM city c
    

     

    더보기

    SQL관련 질문

     

    Having이 크게 의미가 없다면 없는 것이 더 좋을지?

     01-26 첫번째 문제에서 궁금했던 부분 질문이다

    사실상 무조건 count(*)을 해줄 시 1을 만족해서 있으나 마나있데 없는게 더 좋은 것인지? 그리고 만약 있으나 마나한 것이여도 Having달아주면 그만큼 1step 더 밟게 되니 안좋은 영향이 미약하게나마 있을지?

    혹시모르니 걸어두는게 좋음 특히 delete할때는 신중에 신중가하는게 좋음

    이런 경우는 정확한게 중요함!

     

    출력에 글자로 null 표시되게 하는 방법

     01-26 두번째 문제에서 궁금했던 부분 질문이다.

    위에 부분은 null표시 안되고 아래 방식은 표시 되는 이유와 방법

    튜터님 해결책

    서브쿼리에서 아예 아무값도 반환이 안되서 이걸 null로 생각안하고 빈값들어왔네? 그러면 빈값으로 리턴

    이렇게 된듯하다

    SELECT 
        MAX(salary) AS SecondHighestSalary
    FROM (
        SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS dr
        FROM Employee
    ) AS ranked_salaries
    WHERE dr = 2;
    
    SELECT 
        IFNULL(MAX(salary), NULL) AS SecondHighestSalary
    FROM (
        SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS dr
        FROM Employee
    ) AS ranked_salaries
    WHERE dr = 2;
    

     

    쿼리 작동하는데 걸리는 시간보는 법

    mysql워크벤치에서 해보면 바로 나오게 되어있음

    그런데 재밌는 점은 워크벤치에서 한거랑 디비버에서 한거랑 시간 다르게 나오는 경우 있음

    아마 트랜잭션으로 확인하는 방법이 더 정확할듯

    dbeaver) 쿼리 수행 속도 확인하기

     

    no offset을 통해 최적화하는 방법?(좀 많이 심화로 들어갈려는 부분이라 패스가능)  

    미리 해당 위치 찾아서 해당 범위만 데이터 가져오도록 미리 where등으로 제한하는 방법

    이외 더 최적화할 수 있는 간단한 아이디어 방식 어떤 것이 있는지?

    이노디비같은 엔진같은 것을 설정해줘야하게 때문에 아직은 너무 어렵다

    mysql관련 고급배우게 되면 알수 있음 클러스터 만드는 거라던가 나중에 궁금한 경우에 추가로 공부하면 될듯

    DBA가 세팅해둔 것에 따라 달라짐

    결론은 현재로썬 대강 이런 느낌이구나 

     

    group_concat관련

    group_concat사용시 sperator가 ,일경우 생략하는 것이 나은지?

    속도차이 거의 안날테니 적어주는 것이 좋음

    추가로 group_concat에서 order by 말은 안되서 안 될 것 같은데 혹시나 해서 질문

    합칠 컬럼내용 정렬말고 다른 컬럼… 아 암만 생각해도 말 안되는 것 같음

    group_concat관련은 아닌데 같은 문제에서 나온 질문이라 합쳐둠 distinct미리 해두는 것 관련

    distinct도 꽤나 연산이 필요한 함수로 알고 있는데

    중복이 많은 데이터의 경우 그래도 distinct미리 해서 데이터를 가져오는게 연산적으로 이득일지?(아마 예상으로는 중복제거해서 가져온 데이터를 많이 여러번 사용하게 된다면 미리 중복제거해서 처리해둔 데이터 미리 만들어주는게 이득이고, 아니라면 굳이 미리 distinct할 필요 없을듯함 (간단한 distinct연산과정을 알 수 있으면 좋겠음))

    →생각대로 맞는듯

     

    null과 함께 연산될 경우, 정수단위일 때=넣고 안넣고 속도차이? and와 &&차이 , 날짜 필터조건 방식 속도차이?

    null은 null

    정수단위는 거의 차이 없을 듯하고 편한대로 사용

    and와&&동일

    month와 year의 경우 정수로 딱딱 나오니 좀더 빠를듯, between 는 일일히 시간비교해서

    • 추가로 어디선 =한개 어디선 ==두개, 어디선 &한개 보통 |경우였던 것 같은데 어디선 두개 쓰는 이유?

    원래 표준은 =인데 프로그래밍 같은 것 제어자?제어문 같은 경우는 ==두개로 쓴다

     

    union해도 미리 order해둔것은 남아있는지 확인

    전에 유사한 것 했을 때 남아있던 것으로 기억하는데 여기서는 이상하게 되돌아가서..

    추가로 hackerrank관련 질문

     

    +다른 얘기(python, pandas관련)

    df.dt.day_of_week의 dt나 pd.Series.str.lower의 str같은 것들을 뭐라고 하는지?

    https://chat.openai.com/share/1adb0b7a-5031-41e0-ad98-622e159494af

    attribute accecer 속성접근자라고 함

    오늘은 SQL코드카타는 역시나 간단한 문제여서 별 얘기거리가 없고,

    질문은 간단하다면 간단한 부분들에 대해 물어본 것이라 짧게 끝난편이였고

    그리고 판다스 한 부분을 ipynb파일로 되어있어서 그냥 웹상에서 열면 html로 추측되는 형식으로 보이길래 긁어서 그래도 html모드로 해서 올리면 되지 않을까 생각되어 해보았는데 아쉽게도 테이블 등은 정식적으로 보이나 나머지 내용들이 그냥 그대로 보여서 안 될듯하여 추가적으로 올릴 수 있는 방법을 따로 찾아봐야할듯하다

    그리고 추가적으로 머신러닝관련 강의를 들었고 아직 다듣지는 않았는데(기초부분은 다 들었고 심화부분은 아직 덜들었다) 기초부분까지는 크게어려운 부분이 없게 느껴졌다 내일 국가취업지원관련 상담이 잡혀있어서 오늘도 좀 일찍 마무리를 하려한다. 

    '스파르타 > TIL(Today I Learned)' 카테고리의 다른 글

    2024-02-01  (0) 2024.02.01
    2024-01-31  (0) 2024.01.31
    2024-01-29  (1) 2024.01.29
    2024-01-27~2024-01-28  (1) 2024.01.29
    2024-01-26  (1) 2024.01.26
Designed by Tistory.