Python 알고리즘 코드카타
문제 3
몫 구하기
내 답안
def solution(num1, num2):
answer = num1 // num2
return answer
새롭게 알게 된 것
1. 몫만 남기고 싶을 때: //
2. 나머지: %
3. 나눗셈: / (float)
SQL 코드카타
문제 6
동명 동물 수 찾기
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요.
이떄 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해 주세요.
내 처음 답안
SELECT NAME,
COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
AND COUNT > 1 -- WHERE절에 COUNT > 1 조건을 넣음
GROUP BY NAME
ORDER BY NAME;
내 최종 답안
SELECT NAME,
COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT > 1 -- HAVING 절에 COUNT > 1 조건을 넣음
ORDER BY NAME;
틀린 이유
순서를 잘못 설정해서 에러가 났다.
문제는
1) NAME으로 GROUP BY 하고,
2) 같은 이름끼리 묶은 다음 COUNT로 개수를 세고,
3) 개수 센 결과 중 1보다 큰 값만 남기는 흐름이다. (중복된 이름만 남기라고 했으므로)
3)이 제대로 실행되려면 GROUP BY 이후에 실행되어야 한다.
SQL 쿼리 실행 순서는 WHERE가 먼저이고, 그 다음이 GROUP BY이다.
처음에는 WHERE 절에 3)에 해당하는 조건 넣어서 조건이 GROUP BY 이전에 실행되었다.
개선점
조건을 넣을 때
개별 행(row)에 조건 걸 때 → WHERE
그룹화(GROUP BY) 결과에 대해 조건 걸 때 → HAVING
새롭게 알게 된 것 (사전캠프 7일 차 TIL 자료 가져옴)
1. SQL 작성 순서와 SQL 실행 순서가 다르다.
SQL 작성 순서
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
SQL 실제 실행 순서 (gpt)
1 | FROM | 어떤 테이블에서 데이터를 가져올지 결정 |
2 | WHERE | 가져온 데이터에서 행(row) 필터링 |
3 | GROUP BY | 필터링된 데이터를 그룹화 |
4 | HAVING | 그룹화된 결과를 다시 조건으로 필터링 |
5 | SELECT | 원하는 컬럼(또는 집계 함수)을 계산 |
6 | ORDER BY | 결과를 정렬 |
7 | LIMIT | 결과에서 일부 행만 출력 |
2. HAVING
설명
GROUP BY로 그룹 만든 데이터에 조건 부과한다.
보통 집계 함수와 함께 사용: COUNT, MIN, MAX, SUM, AVG
문법
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
예시
SELECT COUNT(customer_id),
country
FROM customers
GROUP BY country
HAVING COUNT(customer_id) > 3
ORDER BY COUNT(customer_id);
WHERE와 HAVING의 차이점 (gpt 검색 후 정리)
WHERE | HAVING | |
적용 시점 | GROUP BY 이전 | GROUP BY 이후 |
조건 대상 | 개별 행(row)에 대해 조건 걸 때 사용 | 집계한 결과에 대해 조건 걸 때 사용 |
사용 대상 | 원본 데이터 | 집계 함수를 사용한 결과 |
언제 주로 쓰이는가? |
데이터가 집계되기 전에 조건 적용할 때 | 이미 집계된 결과에 조건 적용할 때 |
참고 자료
https://www.w3schools.com/sql/sql_having.asp
3. SQL에서 중복값 찾는 법 템플릿
1) 1개 열 안에서의 중복값
GROUP BY 절 사용: 중복값 존재하는지 확인하고 싶은 열 기준으로 GROUP BY
COUNT에 GROUP BY와 같은 열 넣기
HAVING절에 COUNT 함수 사용: GROUP BY의 결과가 1개 초과인지 확인
2) 2개 열에 중복값이 있을 때
GROUP BY 절 사용: 중복값 존재하는지 확인하고 싶은 2개의 열 모두 GROUP BY
COUNT에 GROUP BY와 같은 열 넣기 → NULL은 제외하고 세어줌
또는 * 넣기 → NULL까지 세어줌
HAVING절에 COUNT 함수 사용: GROUP BY의 결과가 1개 초과인지 확인
예시
order_id 14로 동일, product_id 19로 동일한 행이 2개일 때
SELECT order_id,
product_id,
COUNT(*) -- 2개 열이라서 *을 쓴 것이 아니다!
FROM order_details
GROUP BY order_id, product_id
HAVING COUNT(*) > 1;
참고자료
원문: https://learnsql.com/blog/how-to-find-duplicate-values-in-sql/
직무 스터디 발표 피드백
우리 조 (3조) 피드백
신한결 튜터님
업무 프로세스를 짚은 점이 좋았다.
도메인 지식 살펴본 것 좋다. 도메인 지식은 기본이다.
허진성 튜터님
ppt 칭찬 받았다!
직무 공고 분석을 먼저 하고, 그것을 바탕으로 나에게 어떤 능력이 필요한지 파악하는 것이 좋다.
다른 조 피드백에서 참고할 점
- 지원자격은 기본, 우대사항을 다 충족할 수는 없지만 무기 하나는 가지는 것 추천한다.
- 데이터 사이언티스트 역량의 기본기는 수학, 통계학 지식이다.
- 데이터 분석가는 결국에 비즈니스에 기여해야 한다. (내 생각: 이윤 극대화?)