SQL 59

SQL | REGEXP, GROUP_CONCAT

REGEXP: 기존 연산보다 복잡한 문자열 조건을 설정해 데이터를 검색할 수 있는 함수기호기능.문자 하나|or와 같은 기능[]대괄호 안에 나열된 패턴 문자열 조회^시작하는 문자열 조회$끝나는 문자열 조회*0회 이상 나타나는 문자+1회 이상 나타나는 문자[a-z] / [A-Z]소문자 조회 / 대문자 조회[0-9]0-9까지 숫자 조회mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode[.]com$' : 첫글자 소문자나 대문자로 시작 / 소문자 대문자 _ . - 포함 /  @leetcode.com으로 끝나는 문자열 조회GROUP_CONCAT : 그룹으로 묶인 데이터를 하나의 값으로 조회해주는 함수구분자 디폴트값이 ',' 구분자를 바꾸고 싶으면 SEPARATOR ':' 이런 식으로..

SQL/개념 2025.01.13

SQL | Group Sold Products By The Date, Find Users With Valid E-Mails

https://leetcode.com/problems/group-sold-products-by-the-date/description/Group Sold Products By The Date내가 쓴 답 (1021ms) : # 각 날짜별 판매된 제품수, 이름# 사전순으로 정렬SELECT sell_date, COUNT(DISTINCT product) AS num_sold, GROUP_CONCAT(DISTINCT product ORDER BY product SEPARATOR ',') AS productsFROM ActivitiesGROUP BY sell_date-GROUP_CONCAT을 사용다른 사람이 쓴 답 (373ms) : # Write your MySQL query statement be..

SQL/문제 2025.01.13

SQL | Investments in 2016, Department Top Three Salaries, Fix Names in a Table, Delete Duplicate Emails

https://leetcode.com/problems/investments-in-2016/description/Investments in 2016내가 쓴 답 (1076ms) :# 다른 계약자와 동일한 위치에 존재하지 않음 (각자 lat, lon 달라야함)# tiv_2015 다른 1명 이상과 동일한 가치 가져야함# tiv_2016 합 소수점 둘째 자리WITH a AS( SELECT # 위치, tiv_2015 그룹해서 개수 셈 COUNT(*) OVER (PARTITION BY tiv_2015) AS cnt_tiv_2015, COUNT(*) OVER (PARTITION BY lat, lon) AS cnt_lat_lon, tiv_2016 FROM Insurance..

SQL/문제 2025.01.10

SQL | Employees Whose Manager Left the Company, Exchange Seats, Movie Rating, Restaurant Growth, Friend Requests II: Who Has the Most Friends

https://leetcode.com/problems/employees-whose-manager-left-the-company/description/Employees Whose Manager Left the Company내가 쓴 답 (777ms): # 급여 30000 미만# 관리자 없는 직원 (관리자 id는 있지만 직원 id에는 없는)SELECT employee_idFROM EmployeesWHERE manager_id NOT IN (SELECT employee_id FROM Employees) AND salary  다른 사람들이 쓴 답 (279ms): # Write your MySQL query statement belowSELECT employee_idFROM Employee..

SQL/문제 2025.01.09

SQL | Last Person to Fit in the Bus, Count Salary Categories

https://leetcode.com/problems/last-person-to-fit-in-the-bus/description/Last Person to Fit in the Bus1) 탄 순서 기준으로 몸무게 누적합# 1000kg까지 탑승# 초과하지 않고 탑승할 수 있는 마지막 사람SELECT *, SUM(Weight) OVER (ORDER BY Turn) AS total_weightFROM Queue2) 전체 무게가  1000 이하까지만 조회한 후 내림차순으로 정렬, 1개만 추출# Write your MySQL query statement below# 1000kg까지 탑승# 초과하지 않고 탑승할 수 있는 마지막 사람WITH a AS( SELECT *, S..

SQL/문제 2025.01.08

SQL | Customers Who Bought All Products, Primary Department for Each Employee

https://leetcode.com/problems/customers-who-bought-all-products/description/Customers Who Bought All Products# 모든 제품을 구매한 고객 아이디# 1) 모든 상품 개수 조회SELECT COUNT(*) FROM Product ;# 2) 고객테이블과 상품테이블 조인# 3) 고객이 산 제품 개수와 모든 상품 개수 같은 고객 아이디만 조회SELECT c.customer_idFROM Product p JOIN Customer c ON p.product_key = c.product_keyGROUP BY 1HAVING COUNT(DISTINCT c.product_key) # 고객이 산 상품 개수= (SELECT COUN..

SQL 2025.01.07

QCC 2회차

📍 고유수면 무조건 distinct 붙이는 습관1번내가 쓴 답 : # 이메일 프로모션에 “동의”한 고객# 해당 고객들 중 "개인(소매)" 고객의 수SELECT COUNT(*) AS customer_countFROM Person_PersonWHERE EmailPromotion != 0 AND PersonType = 'IN';정답 : SELECT COUNT(DISTINCT BusinessEntityID) as customer_countFROM Person_PersonWHERE EmailPromotion > 0 -- 0 = 이메일 프로모션을 받지 않음AND PersonType = 'IN' -- IN = 개인(소매) 고객💡 고유수 구할 때는 무조건 distinct 붙이는 습관! 기억하기2번내가 (뒤늦게) 쓴..

SQL/문제 2025.01.07

SQL | Game Play Analysis IV, Product Sales Analysis III

https://leetcode.com/problems/game-play-analysis-iv/description/Game Play Analysis IV# 처음 로그인하고 바로 다음날 로그인한 플레이어 소수점 둘째자리 반올림# 첫 로그인 날짜부터 최소 이틀 연속 플레이어수 / 전체 플레이어 수# 1) 최초 로그인 날짜 찾기SELECT player_id, MIN(event_date) AS min_dateFROM ActivityGROUP BY 1 ;# 2) 최초 로그인 날짜를 with로 데려옴# 3) 날짜 차이 1일인 것들 합계와 중복제거한 플레이어 수를 나눔WITH a AS( SELECT player_id, MIN(event_date) AS min_date FROM ..

SQL/문제 2025.01.07