일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Git
- 코테
- 4장
- c언어 제어문
- #코린이 #코딩 #할 수 있다
- 도커
- git오류
- 데베시 1주차
- 자료구조
- python기본
- 인스타
- c언어
- git기초
- 1주차(1)
- 운체 1주차
- 파이썬 알고리즘 인터뷰
- 그리디
- 코딩테스트
- 백준
- 참고X
- Workbench
- 스택
- python기초
- 최단거리
- DP
- 인텔리제이
- git 오류
- 5장
- python자료형
- c언어 기본
- Today
- Total
하루살이 개발자
[SQL] 리트코드 SQL 문제 모음 본문
1. 테이블 에서 두 번째로 높은 급여를 보고하는 SQL 쿼리를 작성
두 번째로 높은 급여가 없는 경우 쿼리는 null로 처리하기
Select max(salary) AS SecondHighestSalary
FROM Employee
Where salary < (Select max(salary) From Employee);
2. 가장 많은 주문을 한 고객 을 찾기
Select customer_number
From Orders
Group By customer_number
Order By count(customer_number) DESC
Limit 1;
3. 큰 국가 구하기
다음과 같은 경우 큰 국가입니다 .
- 최소 300만 면적(즉, ) 또는3000000 km2
- 그것은 적어도 2천5백만의 인구를 가지고 있습니다(즉, 25000000).
Select name, population, area
From World
Where area >= 3000000 or population >= 25000000;
4. 이름이 "RED" 인 회사와 관련된 주문이 없는 모든 영업 사원의 이름을 보고하는 SQL 쿼리를 작성하십시오 .
Select s.name
From SalesPerson s
Where sales_id Not In (select sales_id
From orders
Where com_id = (Select com_id
From company
Where name = "RED")
);
5. 각 플레이어 의 첫 로그인 날짜 를 보고하는 SQL 쿼리를 작성합니다 .
Select player_id, min(event_date) as first_login
From Activity
Group By player_id;
6. 트리의 각 노드는 다음 세 가지 유형 중 하나일 수 있습니다.
- "Leaf" : 노드가 리프 노드인 경우.
- "루트" : 노드가 트리의 루트인 경우.
- "내부" : 노드가 리프 노드도 루트 노드도 아닌 경우.
트리의 각 노드 유형을 보고하는 SQL 쿼리를 작성합니다.
Select id,
CASE
WHEN p_id IS NULL THEN 'Root'
WHEN id IN (Select p_id From Tree) THEN 'Inner'
ELSE 'Leaf'
END
AS type
FROM Tree;
7. (actor_id, director_id)배우가 감독과 3회 이상 협력한 쌍을 제공하는 보고서에 대한 SQL 쿼리를 작성하십시오 .
Select actor_id, director_id
From ActorDirector
Group By actor_id, director_id
having count(1) >= 3; # 행 수가 3이상인 경우
8. 1분기에만 판매된 제품 을 보고하는 SQL 쿼리를 작성합니다 . 즉, 사이 와 포함입니다.20192019-01-012019-03-31
select s.product_id, p.product_name
from Sales s join Product p
on s.product_id = p.product_id
group by s.product_id
having
min(s.sale_date) >= "2019-01-01"
AND
max(s.sale_date) <= "2019-03-31";
9. 2019-07-27부터 30동안 일일 활성 사용자 수를 찾는 SQL 쿼리를 작성 2019-07-27합니다.
select activity_date as day, count(distinct user_id)as active_users
from Activity
group by activity_date
having activity_date >= "2019-06-28"
and activity_date <= "2019-07-27";
10. 자신의 기사 중 하나 이상을 본 모든 작성자를 찾는 SQL 쿼리를 작성하십시오.
id오름차순으로 정렬된 결과 테이블을 반환합니다 .
select distinct author_id as id
from Views
where author_id = viewer_id
order by id;
11. 각 주식 의 자본 이득/손실 을 보고하는 SQL 쿼리를 작성하십시오 .
주식 의 자본 이득/손실 은 주식을 한 번 또는 여러 번 매매한 후의 총 이득 또는 손실입니다.
select stock_name, sum(if(operation = "Buy", -price, price)) as capital_gain_loss
from Stocks
group by stock_name
order by stock_name
12.각 사용자가 이동한 거리를 보고하는 SQL 쿼리를 작성합니다.
로 정렬된 결과 테이블 travelled_distance을 내림차순 으로 반환합니다. 두 명 이상의 사용자가 같은 거리를 이동한 경우 name오름차순 으로 정렬 합니다.
select u.name, IFNULL(sum(r.distance),0) as travelled_distance
from Users u left join Rides r
on u.id = r.user_id
group by u.id
order by travelled_distance desc, name
13. SQL 쿼리를 작성하여 각 날짜별로 판매된 다양한 제품의 수와 이름을 찾으십시오.
각 날짜의 판매된 제품 이름은 사전순으로 정렬해야 합니다.
select sell_date,
count(distinct(product)) as num_sold,
group_concat(distinct product order by product SEPARATOR ',') as products
from activities
group by sell_date
order by sell_date;
[참고]
MySQL에서 group by 로 문자열을 합칠땐 group_concat 을 이용한다.
1. 기본형 : group_concat(필드명)
2. 구분자 변경 : group_concat(필드명 separator '구분자')
3. 중복제거 : group_concat(distinct 필드명)
4. 문자열 정렬 : group_concat(필드명 order by 필드명)
[추가 문법]
IN - 포함되는 것 찾기
where name in('a','b')
LIKE - 포함 여부 찾기
where name like '%AB%'
where name like 'AB%'
where name like '%AB'
like '_a%' 두번째 자리에 a가 들어가는 모든 것
like 'a_%_%' a로 시작되고 최소 3이상의 길이를 가진 모든 것
IF - 조건을 넣어 칼럼의 값을 바꾸는 방법
if(name like '%AB%', 'O', 'X') 포함되는 인자가 있다면 O, 없다면 X
DATE - 문자를 날짜로 바꾸기
date(datetime)
date(yesterday) = date(datetime) 문자열이 아닌 날짜로 연산 가능
DATE_FROMAT - 원하는 날짜 출력 포맷을 지정해줌
date_fromat(datetime, "%Y-%m")
YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
where hour between 0 and 19
IS NULL - null값 찾기
where name is null
IFNULL - null인 값을 찾아 치환함
ifnull(name, 'abc') null값은 abc로 치환
BETWEEN - where절에서 조건 범위를 지정할 때 많이 사용
where price between 10 and 20
select case ~~~ end as name
LIMIT
limit 0, 3 // 0번부터 3개
집계함수
count // null은 숫자로 세지 않음
min, max, count, avg, sum
UNION - 하나의 테이블로 합치기
select
from
union
select
from
JION
inner join 교집합
left join 왼쪽 다
right jion 오른쪽 다
full outer join -> left join union right join으로 구현해야 함
조인
select
from a join b
on a.id = b.id
'코딩테스트' 카테고리의 다른 글
[Softeer] Level3 문제풀이 by Python (2) | 2023.02.04 |
---|---|
[Softeer] Level2 문제풀이 by Python (0) | 2023.02.03 |
코테를 위한 JAVA 정리 (0) | 2022.10.05 |
[프로그래머스] Level1 - 키패드 누르기(Java) (0) | 2022.08.07 |
[프로그래머스] Level1 - 숫자 문자열과 영단어(Java) (0) | 2022.08.07 |