[TIL]
◈ SQL 강의
GROUP BY란? 카테고리별로 숫자 연산을 간단하게 할 수 있는 절
GROUP BY 기본구조
select restaurant_name,
MAX(price)
from food_orders
group by restaurant_name ;
[실습] Group by 를 이용하여 카테고리별 연산해보기
1.음식점별 주문 금액 최댓값 조회하기
select restaurant_name,
MAX(price)
from food_orders
group by restaurant_name ;
2.결제 타입별 가장 최근 결제일 조회하기
select pay_type ,
MAX(`date`)
from payments
group by pay_type
ODER BY란? 오름차순 정렬문 (내림차순으로 하려면 oder by sum(price) desc 적기)
기본구조
select cuisine_type,
sum(price) sum_of_price
from food_orders
group by cuisine_type
order by sum(price)
[실습] Order by 를 이용하여 데이터를 정렬해보기
1.음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬
select restaurant_name,
MAX(price)
from food_orders
group by restaurant_name
order by price DESC
2.고객을 이름 순으로 오름차순으로 정렬하기
select *
from customers
order by name
[숙제] 음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기
select cuisine_type,
MAX(price),
MIN(price)
from food_orders
group by cuisine_type
ORDER by price DESC ;
[퀘스트]
퀘스트 1. [걷기반]이제 놀만큼 놀았으니 다시 공부해봅시다!
#1. `sparta_students` 테이블에서 모든 학생의 이름(name)과 트랙(track)을 선택하는 쿼리를 작성해주세요!
SELECT name, track
from sparta_students
#2. `sparta_students` 테이블에서 Unity 트랙 소속이 아닌 학생들을 선택하는 쿼리를 작성해주세요!
SELECT name, track
FROM sparta_students
WHERE track != 'Unity'
#3. `sparta_students` 테이블에서 입학년도(enrollment_year)가 2021년인 학생과 2023년인 학생을 선택하는 쿼리를 작성해주세요!
SELECT name, enrollment_year
FROM sparta_students
WHERE enrollment_year IN (2021, 2023)
#4. `sparta_students` 테이블에서 Node.js 트랙 소속이고 학점이 ‘A’인 학생의 입학년도를 선택하는 쿼리를 작성해주세요!
SELECT enrollment_year
FROM sparta_students
WHERE track = 'Node.js' AND grade = 'A'
퀘스트 2. [걷기반]공부하다보니 팀 프로젝트 시간이 왔어요!
#1.`team_projects` 테이블에서 AWS 예산(aws_cost)이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리를 작성해주세요!
select name
from team projects
where aws_cost>=40000
#2.`team_projects` 테이블에서 2022년에 시작된 프로젝트를 선택하는 쿼리를 작성해주세요! 단, **start_date < ‘2023-01-01’** 조건을 **사용하지 말고** 쿼리를 작성해주세요!
select name
from team_projects
where YEAR(start_date) = 2022
#3.`team_projects` 테이블에서 현재 진행중인 프로젝트를 선택하는 쿼리를 작성해주세요. 단, 지금 시점의 날짜를 하드코딩해서 쿼리하지 말아주세요!
select name
from team_projects
where start_date <= current_date and end_date >= current_date
#4.`team_projects` 테이블에서 각 프로젝트의 지속 기간을 일 수로 계산하는 쿼리를 작성해주세요!
select name, DATEDIFF(and_date, start_date) as duration_in_days
from team_projects
퀘스트를 수행하면서 모르는 단어에 대해 찾아보았다.
♧ 하드코딩(Hardcoding)
프로그램의 소스 코드 내에 변경하기 어려운 고정된 값을 직접 작성하는 방식을 말한다. 즉, 변수나 매개변수 대신 코드 내에 직접 숫자, 문자열, 설정 값 등을 넣는 방식이다. 하드코딩된 값들은 코드 수정 없이 변경할 수 없으므로, 유연성이 떨어지고 유지보수에 어려움을 겪을 수 있다.
하드코딩의 문제점:
- 유지보수 어려움: 값을 코드 내에 직접 넣으면, 변경이 필요할 때마다 코드 수정을 해야 하므로 유지보수가 복잡해질 수 있다.
- 코드 재사용성 부족: 하드코딩된 값은 특정 상황에서만 유효하므로, 다른 환경이나 조건에서는 재사용하기 어려울 수 있다.
- 버그 발생 가능성: 하드코딩된 값을 변경하지 않고 그대로 배포하거나 잘못된 값으로 고정하면, 프로그램이 잘못 동작할 위험이 있다.
하드코딩을 피하는 방법:
- 환경 설정 파일: 값들을 외부 설정 파일로 관리하거나, 데이터베이스, 환경 변수 등을 통해 동적으로 불러오는 방법 사용
- 상수 사용: 자주 사용되는 값은 코드에서 상수로 선언하고, 변경이 필요한 값은 유동적으로 설정하는 방법을 선택할 수 있다.
예시:
1. 하드코딩 예시:
def calculate_area():
width = 10 # 하드코딩된 값
height = 5 # 하드코딩된 값
return width * height
위 코드에서 width와 height 값이 고정되어 하드코딩되었습니다. 이 값을 변경하려면 코드를 직접 수정해야 한다.
2. 하드코딩이 아닌 방법 (변수를 활용한 유연한 코드):
def calculate_area(width, height):
return width * height
위와 같이 인자로 width와 height를 받아서 사용할 경우, 하드코딩을 피할 수 있다. 이 방식은 값을 코드 외부에서 유동적으로 전달할 수 있어, 유연하고 유지보수가 용이합니다.
♧ Duration
Duration(디지털 시스템이나 소프트웨어에서)란 시간의 지속 시간을 의미한다.
즉, 시작 시점과 끝 시점 사이의 시간 간격이나 기간을 나타내는 개념.
다양한 분야에서의 Duration 의미:
1. 일반적인 의미:
지속 시간: 어떤 사건이나 활동이 시작된 시점부터 끝날 때까지 걸리는 시간.
예를 들어, 어떤 회의가 2시간 동안 진행되었다면, 그 회의의 duration은 2시간이다.
2. 컴퓨터 프로그래밍:
- 시간 간격 계산: 프로그램에서 duration은 두 시점 사이의 시간 간격을 계산할 때 사용된다. 예를 들어, 어떤 이벤트가 시작된 시간과 종료된 시간 사이의 차이를 계산할 때, 그 차이를 duration으로 표현힌다.
- 예시:
- duration을 표현하는 방법: 시간 단위(초, 분, 시간 등)로 나타낼 수 있다.
- 예를 들어, 두 날짜를 빼서 두 날짜 사이의 duration을 구할 수 있다.
#파이썬
from datetime import datetime
start_time = datetime(2024, 11, 1, 8, 0)
end_time = datetime(2024, 11, 1, 10, 30)
duration = end_time - start_time
print(duration) # 결과: 2:30:00 (2시간 30분)
3. SQL에서의 DURATION:
- 데이터베이스에서는 두 날짜 간의 차이를 duration으로 계산하거나, 특정 시간 간격을 나타낼 때 사용될 수 있다.
- 예를 들어, 어떤 주문이 완료된 후 배송에 걸린 시간(delivery_duration)을 계산하거나, 이벤트가 발생한 후 경과된 시간(elapsed_time) 등을 나타낼 때 사용된다.
#SQL
SELECT DATEDIFF(NOW(), order_date) AS days_since_order
FROM orders;
4. 영화나 이벤트 등:
영화나 공연, 회의 등에서 duration은 해당 이벤트가 진행되는 전체 시간을 나타낸다. 예를 들어, 영화의 duration은 영화가 시작한 시점부터 끝나는 시점까지의 시간이다.
5. 금융에서의 Duration:
금융에서는 Duration이란 채권의 이자 지급 기간과 만기까지의 시간을 기반으로 한 금리 변동에 대한 민감도를 측정하는 지표입니다. 이 경우, Duration은 금리가 변동할 때 채권 가격이 얼마나 변할지를 나타내는 지표로 사용된다.
[오늘의 소감]
강의에서 실습이나 숙제가 나오면 멈추고 코드를 작성해서 실행해보고 다시 재생해서 답을 맞춰보는 방식으로 하다보니 남들보다 시간이 오래 걸리는 것 같다. 그리고 퀘스트도 풀다보니 모르는 단어가 나와서 찾아보다보니 시간이 엄청 빨리 갔다.
팀원이 어제 퀘스트에서 나의 오답을 추적하고 있었다.
SELECT salary
FROM sparta_employees
WHERE 40000<salary<60000
위 구문을 DBeaver에 입력했을 때 40000<salary<60000 이 구절이 문법적으로 틀렸음에도 에러코드가 안뜨고 값이 뜨는 문제였다. 도출된 결과값을 보면 DBeaver에서 where절을 무시하고 셀렉트 프롬절만 도출하는 것이었다.
근데 셀렉트 프롬절을 입력하고 웨어만 입력하면 에러코드가 뜬다.
아무래도 DBeaver 개발자가 설마 이런 오류를 범하겠어? 하고 에러코드를 넣지 않은 문법적 오류를 내가 적은 것 같다ㅎ...
'Today I learned' 카테고리의 다른 글
2024.11.08 TIL(AI 9기) (3) | 2024.11.08 |
---|---|
본캠프 커리큘럼 (0) | 2024.11.08 |
2024.11.06 TIL 3(AI_9기) (0) | 2024.11.06 |
2024.11.05 TIL 2(AI_9기) (2) | 2024.11.05 |
2024.11.04 TIL 1(AI_9기) (9) | 2024.11.04 |