250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 설계
- css
- GIT
- 파이썬
- YOLOv5
- 프로그래머스
- 파이썬 슬라이싱
- 파이썬 몫
- python
- where
- 데이터
- sql
- Django
- 아이엠어바텐더
- map
- date_format
- 코딩테스트 연습
- List Comprehension
- Python3
- 프로젝트
- Len
- 단어 공부
- Join
- html
- 슬라이싱
- SQL 고득점 Kit
- count
- 백준
- pcce 기출문제
- ORDER BY
Archives
- Today
- Total
nan + nan = 2nan
[SQL] 코멘토 SQL 기초 문법1_review 본문
728x90
1. Country 별로 ContactName이 ‘A’로 시작하는 Customer의 숫자를 세는 쿼리를 작성하세요.
기존 답안
SELECT country,
COUNT(ContactName) FROM Customers
WHERE ContactName LIKE 'A%'
GROUP BY country;
멘토님 Review
Count 안에 컬럼명을 넣으면 그 컬럼 값에 null이 있을 때는 카운트를 하지 않고, 컬럼명이 없으면 null이 있어도 카운트를 합니다.
컬럼명이 없을 때는 그냥 row 수를 세는 것
보통 전체적인 row 수를 파악하는 것이 더 중요한 경우가 많아 count(1) 혹은 count(*)를 주로 사용. 두 가지는 서로 차이가 없다고 해도 무방하다.
Feedback 적용 답안
select Country, count(1) cnt
from Customers
where ContactName like 'A%'
group by Country;
2. Customer 별로 Order한 Product의 총 Quantity를 세는 쿼리를 작성하세요.
기존 답안
SELECT O.CustomerID, COUNT(OD.Quantity)
FROM OrderDetails AS OD, Orders AS O
WHERE OD.OrderID = O.OrderID
GROUP BY CustomerID;
멘토님 Review
콤마(,)를 통해서 조인을 해주면 inner join이 된다. 보통, 제일 기준이 되는 테이블을 맨 왼쪽에 두고 left join을 제일 많이 쓰고, inner join은 말 그대로 교집합을 검사하고 싶은 경우나 중복을 제거하기 위한 기술적인 목적으로 가끔 사용.
이 경우에는 inner join이나 left join 둘 다 사용해도 크게 무방
총 Quantitiy를 계산하기 위해 이 경우에는 count()보다 sum()이 더 적절하다.
Feedback 적용 답안
select a.CustomerID, sum(b.Quantity)
from Orders a
left join OrderDetails b on a.Orderid = b.Orderid
group by a.CustomerID;
3. 년월별, Employee별로 Product를 몇 개씩 판매했는지를 표시하는 쿼리를 작성하세요.
기존 답안
SELECT O.OrderDate,
COUNT(OD.Quantity)
FROM Orders AS O, Employees AS E, OrderDetails AS OD
WHERE O.EmployeeID = E.EmployeeID
GROUP BY OrderDate;
멘토님 Review
우선 문제의 핵심은, 연/월/일 형태로 되어 있는 OrderDate을 어떻게 연/월 형태로 바꿀지를 고민하는 문제.
MySQL에서는 date_format() 등의 함수를 많이 쓰는데, 해당 실습 환경에선 날짜를 문자로 보고 substr() 함수를 사용 가능
두 기준으로 동시에 group by를 하기 위해서는 두 기준을 group by 절에 모두 명시
Feedback 적용 답안
select substr(a.OrderDate, 1, 7) ym, a.EmployeeID, sum(b.Quantity) SumOfQuantity
from Orders a
left join OrderDetails b on a.OrderID = b.OrderID
group by substr(a.OrderDate, 1, 7), a.EmployeeID;
What did I learn?
1) Count 안에 컬럼명을 넣을 때 null 값이 존재하면 카운트를 하지 않고, 컬럼명이 없으면 null 값이 있어도 카운트를 한다.
2) substr(문자열, 시작 위치, 나타낼 개수) slice를 해주는 함수
3) AS를 사용하지 않고 뒤에 공백 후 붙여주기만 해도 별칭이 형성
4) 콤마(,)를 통해서 조인을 해주면 inner join. 이는 교집합 검사 혹은 중복 제거를 위한 기술적인 목적으로 가끔 사용. 대부분은 left join을 많이 사용
'Database > SQL' 카테고리의 다른 글
[프로그래머스/SELECT] 모든 레코드 조회하기 (0) | 2024.03.13 |
---|---|
[프로그래머스/SELECT] 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2024.03.12 |
[프로그래머스/SELECT] 인기있는 아이스크림 (0) | 2024.03.11 |
[프로그래머스/SELECT] 3월에 태어난 여성 회원 목록 출력하기 (0) | 2024.03.10 |
[SQL] 코멘토 SQL 기초 문법2_review (0) | 2022.03.15 |
Comments