- 오늘 진행한 일
1. SQL 코드카타 (51~55번)
2. 알고리즘 코드카타 복습
3. 알고리즘 코드카타 (23번)
- 기억할 내용
SQL
재구매가 일어난 상품과 회원 리스트 구하기
우선 재구매가 일어난 회원 리스트를 뽑았다..
SELECT *
FROM online_sale
user_id 15번 같은 사람을 뽑아야하는데
같은 사람이 같은 상품을 구매했을 때 = 두가지 정보를 일치했을 때 인데
두가지 다 만족하는 값을 어떻게 구하기 위해
with 절, 서브쿼리, 셀프조인 등등 사용을 해보았지만 원하는 값이 나오지 않았다..
그러다가 알게된
group by 2개 이상 중복 활용 방법!
SELECT user_id, product_id ,count(*)
FROM online_sale
group by 1,2
order by 1
group by 에 두가지 컬럼을 넣을 경우
user_id 가 12, product_id 가 7 인 그룹
user_id 가 13, product_id 가 27 인 그룹
등 으로 나온다
이 문제에서는 2건 이상을 원하므로
having 구절을 사용하여 뽑아냈다!
SELECT user_id, product_id
FROM online_sale
GROUP BY 1,2
HAVING COUNT(*)>1
ORDER BY 1,2 DESC
GROUP BY 절에 대해서 제대로 이해한 듯 해서 속시원하다
최댓값을 구하는 코드카타를 하다가 문득 궁금증이 생겼다.
Q. where 절에서는 max 같은 집계함수는 쓸 수 없을까? 어떤 조건만 쓸 수 있을까?
A.
① 연산자
: 비교연산자(=,>,< 등), 수식연산자(+,-,*,/), 결합 연산자(||)
② AND, OR 조건
③ 범위 조건( BETWEEN ~ AND)
④ NULL 조건
⑤ IN 조건
⑥ EXISTS 조건(서브쿼리만을 사용하여 확일 할 수 있다)
⑦ LIKE 조건
>>
집계함수는 사용할 수 없지만, 생각보다 꽤나 많은 조건을 조회할 수 있었다.
6번 exists 조건은 이후 사용할 때 더 꼼꼼히 공부해봐야겠다!
* 집계함수
: 여러행으로부터 하나의 결괏값을 반환하는 함수
: SELECT 구문에서만 사용가능 하다.
: avg, sum, max, min, count 등
: having 절에서 사용할 수 있으며, 그룹화에 한해서만 가능
조건에 맞는 사용자 정보 조회하기
그룹화를 하여 사용자를 뽑아내는 것까지는 무리없이 진행했으나
문자열을 합치는 방법이 기억이 나지 않아 구글링을 통해 알아냈다.
CONCAT()
, CONCAT(CITY,' ',STREET_ADDRESS1,' ',STREET_ADDRESS2) "전체주소"
, CONCAT(SUBSTR(tlno,1,3), '-', SUBSTR(tlno,4,4), '-', SUBSTR(tlno,8)) "전화번호"
전화번호 속에 '-'하이픈을 넣는 출력방식은 자주 사용할 것 같으니 꼭 기억해둬야겠다
2가지 방법이 있다.
① substr 을 사용하여 원하는 갯수만큼 잘라내기
② left, mid, right 를 사용하여 왼쪽에서, 중간에서, 가운데에서 원하는 만큼 잘라내기
* 문자열을 자른 후 '-' 하이픈 추가해주기
파이썬
x만큼 간격이 있는 n개의 숫자
for i in range(x,n+1):
x 만큼 간격이 있다고 해서
range 를 x 부터 n까지의 숫자를 넣었더니 원하던 값이 나오지 않았다.
이 문제에서 원하는 값은
x씩 증가하는 n개의 숫자이기 때문에
for i in range(1,n+1)
자연수 n만큼의 범위를 구해야한다!
원하는 값을 찾을 수 있도록 천천히 고민해봐야겠다.
정수 내림차순으로 배치하기
def solution(n):
answer = list(map(int,str(n)))
answer.sort(reverse=True)
return answer
answer 값을 줄 때부터 int 형식으로 바꿔서 했더니
정수형 리스트가 나왔고 저렇게 숫자로 구성된 리스트는 join 함수를 사용 할 수 없어 오류가 발생했다.
join 함수는 문자열리스트만 문자열로 합하여 줄 수 있다!
굳이 2행을 수정하고 싶지 않다면
def solution(n):
answer = list(map(int,str(n)))
answer.sort(reverse=True)
return int("".join(map(str,answer)))
이렇게 map 함수로 변환해주는 방법도 있겠으나
계산 속도만 더 느려질 뿐이니
def solution(n):
answer = list(str(n))
answer.sort(reverse=True)
return int("".join(answer))
이렇게 2행의 answer 값을 변환하는 것이 나을 듯 하다!
어제 한 실수를 또 했음,,
이번에는 더 기억에 확 박힐 듯 하다
하샤드 수
def solution(x):
x_list=list(map(int,str(x)))
Sum=sum(x_list)
if x%sum==0:
return True
else:
return False
gg..
이번에는 다 완성했지만 if 조건문에서 매개변수 Sum 이 아닌 sum 으로 입력했다가 오류가 떴다.
매개변수는 다른 이름으로 하는게 좋을 듯!
꼭 주의 하자
콜라츠 추측
특정 조건(1이 나왔을때) 에서 반복을 멈춰줘야 하는 것 > while 반복문
이란 것까지는 추측을 했지만 정작 사용법을 잘 몰라 결국 구글링으로 알아냈다.
while 반복문
: 특정 조건을 만족하는 경우에만 반복하는 문장
초기문
while 조건문:
수행할 코드
변화문
초기문 > answer = 0
조건문 > num != 0:
수행할 코드 > if num %2 == 0:
num /= 2
else:
num = num*3+1
변화문 > answer += 1
* 빈 리스트를 생성 하는 방법
① 리스트 = list()
② 리스트 = []
두가지는 동일하게 빈 리스트를 생성한다.
Q. 정수 n을 리스트로 생성하여 sort 할때 왜 list() 를 사용해야하는지?
Q. 정수 n을 리스트로 생성하여 숫자연산을 하고 싶을 때 int 로는 바로 변환이 불가능한지?
* 조원들과 이야기하면서 나왔는데
() 의 경우 함수 호출을 할 때 사용한다고 한다.
예를 들어 sort 등으로 정렬상태를 변경하는 경우인 듯 하다
매니저님께 제대로 물어보고 공부해야겠다!
- 내일 진행 예정
1. 이번주 TIL 다시 한번 보기
2. SQL 코드카타
3. 알고리즘 코드카타
4. 알고리즘 코트카타 오늘 풀렸던 문제 다시 복습
'TIL' 카테고리의 다른 글
2024-04-04 (0) | 2024.04.04 |
---|---|
2024-04-03 (0) | 2024.04.03 |
2024-04-01 (0) | 2024.04.01 |
2024-03-31 (0) | 2024.03.31 |
2024-03-30 (1) | 2024.03.30 |