본문 바로가기
SQL

12/26 - NEW 팀 대면식&강의 수강 집중

by PETRA_94 2023. 12. 26.

[기억할 개념]

  1. distinct (컬럼): 중복값 제거, count 함수에서 종류 셀 때 사용
  2. concat: 여러 문자를 동시에 합하기
  3. if (조건, 조건을 충족할 때의 값, 조건을 충족하지 못할 때의 값)
  4. case when ~ end:
    case when 조건 1 then 값(수식)1 
             when 조건 2 then 값(수식)2
             else(기타) 값(수식)3
             end
  5. left join ~ on:
    select 조회할 컬럼
    from 테이블1 a(별명1) left join 테이블2 b(별명2) on a.공통컬럼명=b.공통컬럼명
  6. inner join ~ on
    select 조회할 컬럼
    from 테이블1 a(별명1) left join 테이블2 b(별명2) on a.공통컬럼명=b.공통컬럼명
    **JOIN 수식의 개념 (≒ Vlookup 함수)
  7. 조회한 데이터에 값이 없을 때
    1) 0으로 간주하는 방법 → Mysql 에서는 사용할 수 없는 값일 때 해당 값을 연산에서 제외
        => 제거하지 않을 때, 평균 값에서 데이터 부정확하게 나옴
    select restaurant_name,
           avg(rating) average_of_rating,
           avg(if(rating<>'Not given', rating, null)) average_of_rating2
    from food_orders
    group by 1
    2) null 값을 제외하는 방법
    select a.order_id,
           a.customer_id,
           a.restaurant_name,
           a.price,
           b.name,
           b.age,
           b.gender
    from food_orders a left join customers b on a.customer_id=b.customer_id
    where b.customer_id is not null 
    3) null 값에 다른 값으로 대치
       ① 다른 값이 있을 때: if(rating>=1, rating, 대체값)
       ② null 값일 때: coalesce(age, 대체값)
    select a.order_id,
           a.customer_id,
           a.restaurant_name,
           a.price,
           b.name,
           b.age,
           coalesce(b.age, 20) "null 제거",
    => b.age에 값이 없다면 모두 20으로 대체해달라는 내용
           b.gender
    from food_orders a left join customers b on a.customer_id=b.customer_id
    where b.age is null


[배운 점]

  • SQL 쿼리 문법은 생각보다 길어져 어렵다.
    이걸 퍼포먼스 마케터한테 요구한다고..? 대기업들 양애취..?
  • 엑셀에서는 데이터 없는 값을 필터링을 주거나, 혹은 COUNT 함수로도 간편하게 찾을 수 있는데,
    SQL에서는 NULL 값으로 부르는 것 개념 자체가 조금 어렵다.
  • 강의 들을 때마다 주차별 강의자료를 모두 저장!! 저장!! 실무할 때 요긴하게 쓸 것 같다.

[코드카타]

 

=> 튜터님 답변) 정답은 맞으나, 엔지니어링 관점에서 테이블을 한번 더 불러온 것이기 때문에 연산이 2번되어 데이터 처리량이 2배가 됨. 따라서 where 구문 -> left join 구문으로 활용하는 것을 추천. 실무에서는 where 구문을 left join 구문으로 많이 활용함!

 

  • 내가 쓴 raw code:
SELECT NAME
FROM ANIMAL_INS
WHERE DATETIME=(SELECT MIN(DATETIME) FROM ANIMAL_INS)

 

  • 튜터님이 쓴 raw code:
=> limit (행 숫자): 데이터양을 제한시켜 몇 행까지 보겠다. (순위 개념)
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
select name
     , min(DATETIME)
from ANIMAL_INS
group by 1
order by 2

 
[NEW 팀]

  • 팀원은 나까지 총 5명
  • 아침에 정신 없이 자기 소개를 빠르게 하고, MBTI를 모두 여쭤보니 모두 T셨음. (다행..)
  • 그러나 나를 제외한 팀원 4분이 모두 I 성향이셔서 어쩔 수 없이 내가 또 팀장을 맡게 되었음.
  • 이번엔 남성 분들이 많아서 조금 걱정은 되나, 아직까지 잘 해주시고 계심.
  • 그리고 남성 1분과 나를 제외하면 모두 98년생, 올해 만 26세(?)이심.
    어리신 분들이라, 애초부터 나는 '꼰대'라고 명명함.
  • 친구들과 동갑인 남성 분은 이전 직장이 OTT 회사에서 근무하셨고,
    엑셀을 잘하셔서 SQL 업무도 맡게 되었다가 이쪽이 잘 맞아서 아예 직무 변경을 고려하고 계심.
    그래서 1.5주 뒤 프로젝트 주제 선정할 때 많은 도움이 될 듯 함.
  • 아직까지 분위기가 괜찮다.
  • 금주부터 차주까지 모두 강의만 듣는 주간이라, 루즈한 느낌이 있다.
    지난주를 정신 없이 보내다 보니 혼자 해야 하는 일들이 많아서 아직 낯설다.