SQL 20

[프로그래머스] [MySQL] LV.2 자동차 평균 대여 기간 구하기 (ROUND, DATEDIFF)

CAR_RENTAL_COMPANY_RENTAL_HISTORY 라는 테이블에서 (아따 테이블 이름 길다) 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간 리스트를 출력하는 SQL문을 작성하라는 문제. 평균 대여 기간은 소수점 두번째 자리에서 반올림해야함! 음 반올림이 뭐였드라~ ROUND 함수 SELECT ROUND(1.23, 자릿수) AS RESULT FROM DUAL -> 1의 자리까지 나오게 하고싶으면 자릿수에 1을 쓰면 된다. -> 1.2 반올림 해결. SELECT CAR_ID, ROUND(AVG(END_DATE - START_DATE), 1) AS AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID..

SQL 2023.12.29

[프로그래머스] [MySQL] LV.2 입양 시각 구하기 (1) (SUBSTR)

이번엔 ANIMAL_INS 테이블이 아닌 ANIMAL_OUTS 테이블! 보호소에서 몇 시에 입양이 가장 활발히 일어나는지 알아보는 문제이다. 09:00시부터 19:59까지 각 시간대별로 입양이 몇 건이나 발생하는지 조회하는 SQL 작성하라. 이때 결과는 시간대 순으로 정렬 나는 처음에 이 문제를 풀면서 DATETIME에서 시간을 뽑아야한다고 생각하고 SUBSTR을 사용했다. SUBSTR SELECT SUBSTR(ABCDEFG, 2, 3) FROM DUAL -> BCD SUBSTR을 사용할 때 첫번째 인수에는 사용할 문자열, 두번째엔 문자열을 가져오기 시작할 위치, 세번째는 가져올 길이 순으로 되어 있다. 파이썬은 문자열이 0부터 시작하지만 여기선 1부터 시작! 참 MID라는 함수와 SUBSTRING이라는..

SQL 2023.12.27

[프로그래머스] [MySQL] LV.2 중성화 여부 파악하기 (CASE WHEN)

ANIMAL_INS 테이블에서 보호소의 동물이 중성화되었는지 아닌지 파악하는 문제이다. 중성화된 동물은 SEX_UPON_INTAKE 칼럼에 'Neutered' 또는 'Spayed' 라는 단어가 들어가 있다. 동물의 아이디, 이름, 중성화 여부를 아이디순으로 조회하는 SQL을 작성하세요. 이때 중성화가 되어있다면 'O' 아니면 'X'라고 표시해야함! 오키 보자마자 case when 쓰면 되겠다는 생각이 들었다. SELECT ANIMAL_ID ,NAME ,CASE WHEN SEX_UPON_INTAKE LIKE 'Neutered%' OR CASE WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'o' ELSE 'x' END AS '중성화' FROM ANIMAL_INS ORDER BY ..

SQL 2023.12.27

[프로그래머스] [MySQL] LV.2 NULL 처리하기 (COALESCE)

ANIMAL_INS 테이블에서 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디. 순으로 조회하는 SQL문을 작성하는 문제이다. 이때 이름이 없는 동물의 이름은 "No name"으로 표시해 달라는 문제이다. 처음에 CASE WHEN 으로 NULL이면 No name으로 바꾸려는 생각을 하고 그렇게 쿼리를 짜보니까 에러가 떴다. 그래서 검색을 하여 찾아보니 NULL일때 다른 값으로 치환하는 함수가 있었다. COALESCE SELECT A, B, COALESCE(A, '치환할 값') FROM DUAL COALESCE 함수를 이용해서 sql문을 작성하면 SELECT ANIMAL_TYPE ,COALESCE(NAME, 'No name') as NAME ,SEX_UPON_INTAKE FROM ANIMAL_INS..

SQL 2023.12.27

스파르타 4주차

4주차는 subquery에 대해 배웠다. 강의를 다 듣기는 했지만 서브쿼리는 은근히 어려워서 강의를 계속 반복해서 들어야겠다. *subquery 서브쿼리는 where절, select절, from절에서 많이, 유용하게 사용된다. where절에서는 where 필드명 in (subquery) 이런식으로 사용되고 select절에서는 select 필드명, 필드명, (subquery) from ~ 이런식으로 사용되고 from 절에서는 내가 만든 select와 있는 테이블을 join할때 많이 사용된다 *with with table1 as ( ), table2 as ( ) select from~ 이런식으로 복잡한 join문을 깔끔하게 정리 가능 *substring_index 이메일 주소에서 @앞 아이디만 가져오거나 @..

SQL 2023.04.04

스파르타 3주차

사실 3일차 오늘은 테이블과 테이블을 연결하는 join에 대해서 배웠다. inner join, left join, outer join 이 있는데 outer join은 거의 쓰지 않고 inner join과 left join을 많이 쓴다고 하셨다. 쉬운 inner join 먼저 배웠다. 같은 필드명으로 묶으면 쉽게 테이블 두개가 붙여졌다. 옛날에 일할때 join을 한번 사용해 본적이 있다. 데이터베이스의 꽃이라고 봤던 것 같은데, 그땐 꽤나 헤맸던 걸로 기억하는데 다행히도 이번에는 꽤나 쉽게 다가왔다. 차근차근 따라하다가 첫번째 난관이 닥쳤다. SELECT u.name, COUNT(*) as cnt from orders o inner join users u on o.user_id = u.user_id whe..

SQL 2023.03.30

스파르타 2주차

사실 2주차이지만 이틀차 수업ㅋㅋ 한 주차의 강의 시간이 그렇게 길지가 않아서 하루에 한주차씩 들었다. 2주차때 배운 것들은 group by와 order by. ~~별로 묶는 그런 것이었다. 튜터님이 잘 설명해 주신 덕에 그렇게 어렵지 않게 무난하게 반복학습하며 익힐 수 있었다. group by에서 *최솟값 구하기 min() select 필드명, min(필드명) from users group by 필드명 *최댓값 구하기 max() select 필드명, max(필드명), count(*) from users group by 필드명 *평균 구하기 avg() select avg(필드명), count(*) from users group by 필드명 -round()로 묶고 쉼표뒤에 숫자를 붙이면 소수점 몇째자리까지..

SQL 2023.03.29

스파르타 1주차

sql -> 원하는 데이터를 빠르게 뽑아오기 위해 처음에 show tables로 어떤 테이블들이 있는지 한번 슥 보고 select * from 테이블명으로 특정 테이블 정보들을 가져온다 여기서 point, name, email 등등 필요한 정보들을 뽑을 수 있다. -where절 where 을 사용해서 데이터의 조건을 걸기 가능. *같지않음 조건 != -> 요건 뭐 코딩할때도 쓰니까 바로 이해 *범위 조건 between between '조건' and '조건' -> 따옴표 안에 조건을 넣는걸 처음엔 까먹었는데 지금은 연습해서 익숙하다 *포함 조건 in in (조건, 조건) ex) where week in (1, 3) 1주차와 3주차 -> 이건 쉬워서 바로 이해 *패턴 조건 like % like '%naver..

SQL 2023.03.28