- Today
1. ADsP 강의 (정형 데이터 마이닝)
2. 파이썬 코드카타
3. SQL 코드카타
- Today I Learned
SQL
입양 시각 구하기
단순히 시간별 카운트를 해주면 되는줄 알고 이렇게 작성했는데..
SELECT HOUR(datetime) HOUR, COUNT(*) COUNT
FROM ANIMAL_OUTS
GROUP BY 1
ORDER BY 1
문제에서 원하는 0시부터~23시까지가 포함되어 있지 않고 해당 테이블 내의 입양시각만 카운트 되어 오답!
그럼 해당 테이블에 없는 입양시각은 어떻게 만들어야 하나 고민 하다
CASE WHEN 을 사용해서 하나씩 다 입력을 해야하나 했는데.. 너무 비효율적인 것임..
구글링을 하니 재귀쿼리 라는 것과 파이썬 처럼 변수를 주는 방식이 있는 것을 발견했다!!
WITH RECURSIVE TIME AS(
SELECT 0 AS h
UNION ALL
SELECT h+1 FROM TIME WHERE h < 23)
SELECT h, COUNT(HOUR(DATETIME)) AS 'COUNT'
FROM TIME LEFT OUTER JOIN ANIMAL_OUTS
ON TIME.h=HOUR(ANIMAL_OUTS.DATETIME)
GROUP BY h
ORDER BY h
WITH RECURSIVE
recursive with 구문이라고도 불린다
초기값 부터 반복을 멈추는 조건까지의 값을 입력하여 가상의 테이블을 생성해준다
SET @hour =-1;
SELECT (@hour := @hour+1) AS HOUR,
(SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) = @hour) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23
ORDER BY HOUR;
SET 함수
: 변수명 앞에 @ 를 넣어준다
: 변수에 값을 대입하여 테이블을 만들어준다.
파이썬
내적
인덱스의 값끼리 곱해주는 방안은 떠올리지 못해서
일단 입출력 예시를 보고 수기로라도 풀어보려고 시도해봄
def solution(a, b):
answer = 0
if len(a)==3:
answer += a[0]*b[0]
answer += a[1]*b[1]
answer += a[2]*b[2]
answer += a[3]*b[3]
elif:
answer += a[0]*b[0]
answer += a[1]*b[1]
answer += a[2]*b[2]
return answer
SyntaxError: invalid syntax
네에 그럴줄 알았고요!
while 을 써볼까 하고 지난번에 했던 콜라츠 추측 포스팅을 보고 따라해보았다
def solution(a, b):
answer = 0
while len(a)!=len(b):
if len(a)==len(b):
answer += a*b
result = sum(answer)
return result
UnboundLocalError: local variable 'result' referenced before assignmen
음 에러 원인은 result 가 없는 변수였기 때문이라고 함!
answer = 0
result = 0
while len(a)!=len(b):
if len(a)==len(b):
answer += a*b
result = sum(answer)
return result
result = 0 을 선언해주었는데 결괏값이 0 이었움..
리스트*리스트는 안되는 것 같다!
return int(a)*int(b)
int 형이 아니어서 곱해줄 수 없다길래 저렇게 했더니
int() 인수는 list 가 아닌 문자열 등이어야 한다고 에러가 떴다
열심히 구글링을 통해 리스트*리스트를 할 수 있는 함수가 있는 것을 발견!
zip() 메서드
: 순회 가능한 객체를 인자로 받고, 차례로 접근하여 반복자를 반환
: 두 그룹의 데이터를 서로 엮어주는 내장 함수
# for x*y in zip(list1,list2)
f solution(a, b):
answer = [x*y for x,y in zip(a,b)]
result = sum(answer)
return result
a와 b 리스트를 묶어 x와 y 로 뽑아낸 후 x*y 를해준다
만든 리스트를 더해준다..!
내가 처음에 생각했던 리스트의 길이만큼 곱해주고 싶었다면
def solution(a, b):
answer = 0
for i in range(len(a)):
answer += a[i]*b[i]
return answer
이런 방식도 가능하다
사실 이렇게 풀고 싶었는데 인덱스를 뽑아주고 싶다면 i 값을 주어도 됐을 것을~~
다음에는 이런 알고리즘으로 풀어볼 수 있도록 공부해야겠당
- Next
1. ADsP 강의
2. SQL 코드카타 복습
3. 알고리즘 코드카타 복습
'TIL' 카테고리의 다른 글
2024-04-15 (0) | 2024.04.15 |
---|---|
2024-04-12 (0) | 2024.04.12 |
2024-04-09 (0) | 2024.04.09 |
2024-04-08 (0) | 2024.04.08 |
2024-04-05 (0) | 2024.04.05 |