여러 개의 값 비교하기 분기별 매출 증감 판정하기 SELECT year, q1,q2 # q1과 q2의 매출 변화 평가하기 2분기 매출이 더 높으면 + 반대면 - ,case when q1 < q2 then '+' when q1 = q2 then ' ' else '-' end as jugge_q1_q2 # q1과 q2의 매출액 차이 계산하기 ,q2 - q1 as diff_q2_q1 # q1과 q2의 매출 변화를 1,0,-1로 표현하기 # sign 함수는 매개변수가 양이라면 1 음이면 -1 0이면 0을 반환한다. ,sign(q2-q1) as sign_q2_q1 from quarterly_sales order by year 1분기와 2분기 매출액을 비교해서 2분기 매출이 더 높으면 + 적으면 - 같으면 공백을 ..
LENGTH() SELECT LENGTH('Hello World') 'Hello World' 의 문자열의 길이를 반환한다. 결과는 11 하지만 LENGTH()는 문자열의 실제 길이를 바이트 단위로 반환한다. 만약 멀티바이트 문자(한글, 중국어, 일본어)를 대상으로 LENGTH() 함수를 사용하면 다른 결과를 반환하게 된다. 그럴 때는 CHAR_LENGTH()를 사용하면 된다. CHAR_LENGTH() SELECT CHAR_LENGTH('안녕하세요') CHAR_LENGTH()는 멀티바이트 문자를 올바르게 처리하여 문자열의 길이를 반환한다. 따라서 위의 예시에서는 "안녕하세요" 문자열의 길이 5를 반환하게 된다. LENGTH()는 문자열의 길이(바이트)를 반환한다. CHAR_LENGTH()는 문자열의 길이(..
FROM 절에 사용하는 서브쿼리를 인라인 뷰라고 한다. 유연성과 가독성을 향상시키는 도구로 활용된다. 인라인 뷰는 임시 테이블을 생성하는 방식으로 작동한다. 예시 SELECT A.FLAVOR, B.TOTAL FROM FIRST_HALF A, (SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL FROM JULY GROUP BY FLAVOR)B WHERE A.FLAVOR = B.FLAVOR FLAVOR 별로 총 판매량을 구해서 메인 쿼리에서 조회한 경우다. 그리고 WHERE 절에 메인 쿼리와 인라인 뷰 간의 조인 조건을 명시하는 것이 일반적이고 중요하다고 한다. 대표적으로 인라인 뷰를 사용하는 상황은 다음이 있다. 복잡한 계산이나 집계를 필요로 하는 경우: 서브쿼리를 사용하여 계산된 ..
IF문 이용 SELECT restaurant_name, avg(rating) avg_rating, avg(if(rating 'Not given',rating,null)) avg_rating2 FROM food_orders fo group by 1 해당 테이블 rating 컬럼엔 3,4,5,와 같은 평점 말고 Not given 이라는 문자열 자체가 들어가 있었다. 그래서 평균을 구할 때 if문을 이용해서 rating의 값이 'Not given'이 아니면 rating을 가져오고 Noit given 이라면 null로 바꿔줄 수 있다. COALESCE 해당 컬럼이 널 값을 반환할 경우 대체 값으로 바꿔준다 - 기본 구조 SELECT coalesce(컬럼, 대체 값) FROM ~ SELECT coalesce(b...
RANK 랭크 함수는 말 그대로 랭크(순위)를 매기는 함수 SELECT cuisine_type, restaurant_name, cnt_order, ranking FROM ( SELECT cuisine_type, restaurant_name, cnt_order, rank() over (partition by cuisine_type order by cnt_order desc) ranking FROM ( SELECT cuisine_type, restaurant_name, count(1)cnt_order FROM food_orders group by 1,2 )a )b where ranking
PIVOT TABLE 2개 이상의 기준으로 데이터를 집계할 때, 보기 쉽게 배열하여 보여주는 것을 의미 연습 (5주차 숙제) SELECT cuisine_type, max(if(ages = "10", order_count , 0)) "10", max(if(ages = "20", order_count , 0)) "20", max(if(ages = "30", order_count , 0)) "30", max(if(ages = "40", order_count , 0)) "40", max(if(ages = "50", order_count , 0)) "50" FROM (SELECT cuisine_type, case when age between 10 and 19 then 10 when age between 20 a..
3주차에서는 문자를 바꿀 수 있는 REPLACE와 원하는 글자를 뽑아올 수 있는 SUBSTR 문자들을 막 그냥 합칠 수 있는 CONCAT, 그리고 조건문인 IF와 CASE 문을 배웠다 select restaurant_name "원래 상점명", replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명" # 원래 상점명에서 Blue가 들어간 것을 Pink로 바꿈 from food_orders where restaurant_name like '%Blue Ribbon%' 위 쿼리는 가게 이름에 Blue Ribbon이 들어간 것들을 대상으로 Blue를 -> Pink로 replace 해준다. 함수의 의미가 상당히 직관적이어서 좋다. SELECT addr "원래 주소", REPLACE ..
SELECT food_preparation_time , delivery_time , food_preparation_time + delivery_time as total_time # 산술연산 가능 - * / FROM food_orders fo 각 칼럼의 값들을 서로 + 해서 새로운 칼럼을 만들어 출력이 가능하다. 요리 준비 시간과, 배달의 시간을 합하여 total_time에 저장하고 출력 +를 포함한 다른 산술연산도 가능하다( -, *, / ) ## 합계와 평균 select sum(food_preparation_time) total_food_preparation_time, # 총합 avg(delivery_time) avg_food_preparation_time # 평균 from food_orders SEL..
SELECT * #데이터를 가져오는 기본 명령어 * = 모든 컬럼을 가져온다는 의미 FROM food_orders # 가져올 테이블을 특정해주는 문법 select 옆에 *를 붙이면 모든 컬럼을 가져오겠다는 의미다. 원하는 컬럼만 가져오고 싶다면 select 옆에 명시해주면 된다. SELECT restaurant_name as "음식점", addr address # 원하는 컬럼만 가져오기 select 컬럼1, 컬럼2, 컬럼3, ... from food_orders # alias 주는법 - 1. 컬럼 as 별명 2. 컬럼 별명 (as 생략 가능) *한글, 특수문자가 있다면 큰 따옴표로 묶어줘야함. where (조건절) 내가 원하는 조건을 걸어 필요한 데이터만 뽑아올 수 있다. 상당히 유용하고 앞으로도 자주 ..