sql 코드카타 10주차까지 모든 문항 푸는 것을 목표로. 4-10주차. 주차별 22문항. 하루에 약 5문항 풀도록.
문제 35.
입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.
SELECT datediff(o.datetime,i.datetime)
from animal_ins i join animal_outs o on i.animal_id= i.animal_id
order by 1
limit 2
저거를 뽑아서 섭쿼리 어떻게 해볼랬는데 그냥 오더바이로 가능...
SELECT i.animal_id, i.name
from animal_ins i join animal_outs o on i.animal_id= i.animal_id
order by datediff(o.datetime,i.datetime) desc
limit 2
첨에 type이 datetime이어서 i.datetime-o.datetime 했는디 안 되어서 안 되는 갑다. 함수 구글링.
SELECT i.animal_id, i.name
from animal_ins i join animal_outs o on i.animal_id= o.animal_id
order by datediff(o.datetime,i.datetime) desc
limit 2;
2번째 줄. o.animal_id 오타나서 계속.. 틀렸던 것. 함수 사용 않고도 숫자연산기호도 가능함..
문제 36.
보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화1되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.
SELECT i.animal_type, i.name
from animal_ins i join animal_outs o on i.animal_id = o.animal_id
where i.sex_upon_intake = 'Intact' and o.sex_upon_outcome in('Spayed','Neutered')
order by i.animal_id
SELECT i.animal_type, i.name
from animal_ins i join animal_outs o on i.animal_id = o.animal_id
where i.sex_upon_intake like '%Intact%' and o.sex_upon_outcome like '%Spayed%' or o.sex_upon_outcome like '%Neutered%'
order by i.animal_id
SELECT i.animal_id, i.animal_type, i.name
from animal_ins i join animal_outs o on i.animal_id = o.animal_id
where i.sex_upon_intake like '%Intact%' and (o.sex_upon_outcome like '%Spayed%' or o.sex_upon_outcome like '%Neutered%')
order by i.animal_id
괄호..괄호..
python 기초 문법
- 3**2 3의 2승
- 3%2 3을 2로 나눈 나머지
- t/f 조건문에 사용
- 변수; 값을 담는 것/ 컴터 입장에서; 메모리에 올려진 값을 지적. 가리키는 것
- str() 숫자-> 문자
- len() 문자 길이
- text[ :3] = 첨부터 인덱스 0,1,2 추출
- [3:] 인덱스 3부터 끝까지
- [3:7] 인덱스 3부터 7까지
-문자열 자르기 email.split('@')[0] @ 기준으로 자르고 첫번째
myemail= abc@mail.com
result= myemail.split('@')[1].split('.')[0]
# abc
- 리스트 [] 와 딕셔너리 {}
-리스트 순서 ㅇ(문자열과 같이 인덱싱 슬라이싱 가능) / 리스트 내 리스트 담기 가능
-a.append(5) 리스트 맨 마지막에 5 추가.
-a.sort() 오름차순 정렬 /a.sort(reverse=True) 내림차순
- 1 in a ==> a 리스트에 요소1이 있는가. 있다면 t 아니면 f
-딕셔너리 순서x
리스트는 인덱스넘버 넣어서, 딕셔너리는 키를 넣어서 값을 조회
-조건문 if elif else
-반복문 for in
리스트 내 요소 하나씩 꺼내서 써먹는다. 변수에 담어서
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for person in people:
if person['age']>20:
print(person['name'])
for i, person in enumerate(people):
name= person['name']
age= person['age']
print(i,name,age)
요소의 순서를 적을 수도.
for i, person in enumerate(people):
name= person['name']
age= person['age']
print(i,name,age)
if i>5:
break
중단지점 선택
-반복문 예제
# 리스트에서 짝수의 개수 출력
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
count=0
for num in num_list:
if num%2==0:
count+=1
print(count)
# 리스트 내 모든 숫자 더하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
sum = 0
for num in num_list:
sum+=num
print(sum)
# 리스트 안에 있는 자연수 중 가장 큰 숫자 구하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
max=0
for num in num_list:
if max<num:
max=num
print(max)
- 함수
def bus_rate(age):
if age > 65:
print("무료로 이용하세요")
elif age > 20:
print("성인입니다.")
else:
print("청소년입니다")
bus_rate(27)
def sum(a,b):
return a+b
result = sum(1,2)
print (result)
def bus_rate(age):
if age>65:
return 0
elif age>20:
return 1200
else:
return 750
myrate=bus_rate(60)
print(myrate)
def check_gender(pin):
num = int(pin.split('-')[1][0])
if num % 2 == 0:
print('여성')
else:
print('남성')
my_pin = "200101-3012345"
check_gender(my_pin)
-심화문법. 튜플 = 리스트와 비슷하나 불변형. 추가 수정 불가. 순서 존재.
-집합; 중복제거됨.
a = [1,2,3,4,5,3,4,2,1,2,4,2,3,1,4,1,5,1]
a_set = set(a)
print(a_set)
set(a)
# a를 집합으로 만들어줌
print(a & b) # 교집합
print(a | b) # 합집합
print(a-b) # 차집합
- f-string
scores = [
{'name':'영수','score':70},
{'name':'영희','score':65},
{'name':'기찬','score':75},
{'name':'희수','score':23},
{'name':'서경','score':99},
{'name':'미주','score':100},
{'name':'병태','score':32}
]
for s in scores:
name=s['name']
score=str(s['score'])
print(f'{name}의 점수는 {score}점입니다.')
-예외처리/ try 시도해보고 except 에러가 난다면 빼삼
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby'},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for person in people:
try:
if person['age'] > 20:
print (person['name'])
except:
name = person['name']
print(f'{name} - 에러입니다')
- 파일 분리하여 함수 작성
from main_func import *
say_hi()
# 함수 파일(main_func)
def say_hi():
print('안녕!')
-if문 삼항 연산자
(참일 때 값) if (조건) else (거짓일 때 값)
result=('짝수' if num%2==0 else '홀수')
print(f'{num}은 {result}
-for 문
a_list = [1, 3, 2, 5, 1, 2]
b_list = []
for a in a_list:
b_list.append(a*2)
print(b_list)
-----
a_list = [1, 3, 2, 5, 1, 2]
b_list=[a*2 for a in a_list]
print(b_list)
-map
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
def check_adult(person):
if person['age']>20:
return '성인'
else:
return'청소년'
result=map(check_adult,people)
print(list(result))
#map people을 하나씩 돌면서 check adult에 넣어라/ 그 결과값을 리스트로 다시 묶음
-lamda
result=map(lambda x:x,people)
print(list(result))
---
result=map(lambda person:'성인' if person['age']>20 else '청소년',people)
print(list(result))
#하나씩 돌아가면서 넣음 함수 만들지 않아도 됨
#보통 x 사용
---
result = filter(lambda x: x['age'] > 20, people)
print(list(result))
-함수 매개변수
복사
def cal2(a, b=3):
return a + 2 * b
print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))
#디폴트 값 지정. 값을 넣으면 해당 값. 값 넣지 않을 시 설정된 기본값으로
-객체 지향; 개개 물체에 관련된 속성 및 함수를 넣어 그것만 불러오기. 효율적, 직관적
240108월_TIL (0) | 2024.01.08 |
---|---|
240105금_TIL (1) | 2024.01.05 |
240103수_TIL (1) | 2024.01.03 |
240102화_TIL (0) | 2024.01.02 |
23122금_TIL (1) | 2023.12.29 |