SQL

· SQL/LeetCode
문제 링크https://leetcode.com/problems/delete-duplicate-emails/문제중복 이메일이 있으면 id가 가장 작은 하나의 이메일만 남기고 삭제해라.Keyword : DELETE, SELF JOIN풀이DELETE 문에서 SELF JOIN 사용법을 몰라 처음엔 조금 해맸는데 엄청 간단하게 구현할 수 있는 문제였다.A는 삭제할 테이블, B는 비교할 테이블로 두고 A와 B의 이메일이 같으면서 A의 id가 B의 id보다 더 큰 경우 삭제시켰다.DELETE A FROM Person A, Person BWHERE A.email = B.email and A.id > B.id;
· SQL/LeetCode
문제 링크https://leetcode.com/problems/game-play-analysis-iv/문제처음 로그인한 날로부터 최소 2일 연속 로그인한 플레이어의 비율을 구하시오. 소수점 2자리까지 반올림하여 표시하시오.Keyword : 날짜 함수, GROUP BY풀이다른 날짜는 생각하지 않고 플레이어별 처음 로그인 날짜를 기준으로 한다. 3일 이상 연속은 생각할 필요 없이 2일 연속만 찾으면 된다.플레이어별 (로그인 날짜 - 1)한 날짜가 최초 로그인 날짜인지를 확인하면 된다.전체 플레이어를 COUNT할 때 player_id의 중복을 고려해야 한다.SELECT ROUND(COUNT(*)/(SELECT COUNT(DISTINCT player_id) FROM Activity),2) AS fractionF..
· SQL/LeetCode
문제 링크https://leetcode.com/problems/confirmation-rate/문제사용자의 메시지 확인 비율 구하기. 비율은 확인된 메시지 수/전체 메시지 수로 구함.확인 메시지를 요청하지 않은 사용자의 확인 비율은 0이며 소수점 두자리까지 반올림하시오.Keyword : LEFT JOIN, IF풀이처음엔 COUNT를 사용해서 직접 나눠주려다가 잘 안풀려서 찾아봤더니 AVG와 IF 함수로 풀이하시는 걸 봤다.IF문을 사용해서 'confirmed' 인 것만 더해서 평균내면 확인 비율 구할 수 있다.IF와 그룹 함수를 적절히 활용하기SELECT A.user_id, ROUND(AVG(IF(B.action='confirmed',1,0)),2) AS confirmation_rateFROM Signu..
· SQL/LeetCode
문제 링크https://leetcode.com/problems/students-and-examinations/문제각 학생이 각 시험에 참여한 횟수를 구해라. 없으면 0으로 출력. student_id와 subject_name으로 정렬해라.keyword : CROSS JOIN, LEFT JOIN, GROUP BY풀이처음엔 Subjects 테이블을 사용안하고 풀 수 있나 했는데 0도 출력하기 위해서 CROSS JOIN할 때 사용했다.COUNT 할 때, Examinations 테이블의 student_id로 해야 제대로 카운트된다.GROUP BY 할 때, student_id, subject_name만 사용해도 가능했지만 세 개 다 써주는게 실행시간이 빨랐다.SELECT A.student_id, A.student_..
· SQL/LeetCode
문제 링크https://leetcode.com/problems/average-time-of-process-per-machine/문제여러 컴퓨터가 있는 공장 웹사이트가 있다. 각 기계가 프로세스를 완료하는 데 걸리는 평균 시간을 구하시오.프로세스를 완료하는 시간은 'end' timestamp - 'start' timestamp이고 소수점 이하 3자리에서 반올림하시오.keyword : SELF JOIN, GROUP BY풀이SELF JOIN 하는데 ON절을 이용하여 시작 시간과 끝나는 시간 분리하고 GROUP BY 후 AVG() 함수 활용하기SELECT A.machine_id, ROUND(AVG(B.timestamp-A.timestamp),3) AS processing_timeFROM Activity A IN..
· SQL/LeetCode
문제 링크https://leetcode.com/problems/rising-temperature/  문제어제와 비교해서 온도가 더 높은 날의 id 출력하기Keyword : SELF JOIN, 날짜 함수풀이1. 날짜 함수 DATEDIFF()를 활용하여 SELF JOINDATEDIFF(date1, date2) : 두 날짜 값 사이의 일수 계산SELECT A.idFROM Weather A INNER JOIN Weather BON DATEDIFF(A.recordDate, B.recordDate) = 1WHERE A.temperature > B.temperature; 2. 날짜 함수 DATE_ADD()를 활용하여 SELF JOINDATE_ADD(date, INTERVAL value UNIT) : 날짜에 값만큼 유..
· SQL
임시 테이블 Dual : 함수 및 문자열 처리에 대한 테스트용 테이블. 1행 1열만 들어있음 Select * From dual; 문자 통합 함수 || : 왼쪽과 오른쪽을 합쳐줌 Concat() : 왼쪽 오른쪽 합쳐줌. 두 개까지만 가능하며 함수 안에 함수 넣어서 사용 /* 주소 1과 주소 2 합치기 */ Select (mem_add1 || ' ' || mem_add2) as mem_add, Concat(Concat(mem_add1, ' '), mem_add2) as mem_add2 From member; 아스키 코드 함수 Chr() : 아스키코드 숫자를 문자로 변환 Ascii() : 문자를 아스키코드 숫자로 변환 /* 문자 A의 아스키 코드 65 */ Select Chr(65), Ascii('A'), F..
· SQL
컬럼 별칭으로 조회하기 별칭(alias) : 함수 또는 연산을 사용해서 조회하는 컬럼들은 별칭을 사용해서 컬럼 이름을 지정 띄어쓰기가 있으면 쌍따옴표로 묶어줘야함 /* 별칭으로 조회하기 */ Select prod_name, (prod_sale*10) as prod_sale, -- 현장에서 가장 많이 쓰는 방법 (prod_sale*10) as "prod sale", (prod_sale*10) as "판매금액", (prod_sale*10) "판매", (prod_sale*10) sale, (prod_sale*10) 판매금액 From prod; 데이터 정렬하기 Order By : 조회한 데이터 정렬 시 사용. Select 문장의 가장 마지막에 작성 오름차순 : ASC 내림차순 : DESC 오라클이 해석하는 순서..
· SQL
데이터 입력하기 Insert into : 데이터 입력 시 사용 Insert into test_TB( -- 데이터를 입력할 컬럼명 지정 (not null은 무조건 지정) id, pw, name ) Values( 'test01', 'test01_pw', '테스터01' ); 데이터 조회하기 Select From : 데이터 조회 시 사용 서버가 컴파일하는 순서 : Select > From > Table > Column 컬럼에 *를 입력하면 전체 컬럼이 조회됨 Select id, pw, name, age From test_TB; 데이터 수정하기 Update Set : 데이터 수정 시 사용 서버가 컴파일하는 순서 : Update > Table > Where > Set Update test_TB Set name = ..
윤시·̑.̮·̑
'SQL' 카테고리의 글 목록