내일배움캠프/TIL

[TIL] 2024/08/09

leswing 2024. 8. 9. 20:42

SQL 강의를 모두 완료하고

 

뭘 해볼까 하다가 SQL 코드카타를 해봤는데

 

뭔가 기존에 하던 방식으로도 query작성이 됐지만 작성 하던 도중 막힌 부분에서 해답을 보다가

 

limit과 having을 봤는데

 

컬럼에서 동일한 값을 가지는 경우만 출력하는 query를 작성하는데

select NAME, cnt_name
from
(
SELECT NAME, count(NAME) cnt_name
from ANIMAL_INS
group by NAME
) a
where cnt_name >= 2
order by NAME

이게 내가 작성했던 방식이다.

 

근데 sub를 사용해서 작성해야할 만큼 카타가 많이 진행된건가? 싶어서 해답을 좀 찾아보다가

SELECT name, count(*) as 'COUNT'
from ANIMAL_INS
where NAME is not null 
group by name
having count(*) >= 2
order by name;

라는 query를 봤다

 

having이라는 구문을 처음봤지만 작동하는걸 보면 어떤 방식으로 작동하는지 알겠는데

 

사실 처음 query를 작성하기 전에 이런 방식으로 작성했었는데

SELECT name, count(*) as 'COUNT'
from ANIMAL_INS
where NAME is not null and 'COUNT'>=2
group by name
order by name;

해당 query는 오류가 나서 작동이 안됐다.

 

'cnt_name >= 2' 부분이 없다는 오류 구문이 나왔었는데

 

이후 검색을 하면서 찾아보면서 이유를 알았는데

 

having의 경우 group by 절에서 묶여진 그룹에서의 조건이고, where 절의 경우 한개의 row별로 조건을 주는 문법이라서

 

쿼리 실행 순서상으로 where 다음으로 실행되는 집계함수에 접근하려면 에러가 난다고 하더라

 

그렇게 having에 대해서 알았고 그 다음은 limit 인데

 

시간 결과에서 가장 빠른 결과값을 가진 하나를 조회하는 쿼리를 작성했는데

Select NAME
from
(SELECT NAME, DATETIME, RANK() OVER(ORDER BY DATETIME) rn
FROM ANIMAL_INS) a
where rn = 1

해당 구문도 sub를 쓰기도 하고 사실 해당 구문을 작성하다 막혀서 검색을 좀 했는데

 

그러다 본 limit 구문이

SELECT NAME
    FROM animal_ins
    ORDER by datetime asc
    limit 1;

아마 순서대로 작성하고 하나의 row만 출력하는거 같은데

 

그렇게 limit에 대해서 알게 되었다

 

그다음 적당히 반복 연습을 하다가

 

발표 시간이 되서

 

여러 조들의 발표와 튜터님의 피드백을 봤는데

 

몇몇 중요하게 강조된 부분이

 

기존에 주어진 것만 하는게 아니라 무언가 더 할려고 찾아가는게 중요하고

 

팀원들 끼리의 트러블 슈팅이 잘 되는게 좋다고 한다.

 

아직은 팀 과제를 진행하지 않아서 정확한 파악은 무리겠지만

 

앞으로 하면서 잘 생각하면서 해야할거 같다.

 

 

 

 

'내일배움캠프 > TIL' 카테고리의 다른 글

JS 문법 종합 2주차 240814  (0) 2024.08.14
JS 문법 종합 1주차 240813  (0) 2024.08.13
[TIL] 2024/08/08  (0) 2024.08.08
[TIL] 2024/08/07  (0) 2024.08.07
[TIL] 2024/08/06  (0) 2024.08.06