내일배움캠프/TIL

[TIL]241127_코드카타, SQL 연습문제4

dydatablog 2024. 11. 27. 20:31

6. 동명 동물 수 찾기

--[정답1] count(*) 와 where절 활용시 
select
     name,
     count(*) as count #count(name)
 from animal_ins
 where name is not null
 group by name #집계함수(컬럼)을 쓰려면 [group by 컬럼]이 꼭 필요!
 having count(*) >= 2
 order by name;


-- [정답2] count(name) 활용 시 
select
    name,
    count(name) as count #count(name)은 null값을 제외하고 카운팅!
from animal_ins
 where name is not null <- 불필요. count(name)은 name값이 null이면 카운팅 안함
group by name #집계함수(컬럼)을 쓰려면 [group by 컬럼]이 꼭 필요!
having count(name) >= 2
order by name;

*WHERE, HAVING 차이

https://dydatablog.tistory.com/37

 

[SQL]코딩순서와 실행 순서, WHERE, HAVING 차이

[Cording order]1. SELECT2. FROM3.JOIN4. ON5. WHERE6. GROUP BY7. HAVING8. ORDER BY9. LIMIT [Execution order]1. FROM2. ON3. JOIN4. WHERE5. GROUP BY6. HAVING7. SELECT8. DISTINCT9. ORDER BY10. LIMIT    WHERE, HAVING 차이WHERE 절은 그룹화 전에 조

dydatablog.tistory.com

 

 

7. 아픈 동물 찾기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY 1

 

8.상위 n개의 레코드

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1

 

9.최솟값 구하기

SELECT MIN(DATETIME)
FROM ANIMAL_INS

--또는

SELECT DATETIME
FROM ANIMAL_INS
ORDER BY 1
LIMIT 1

 

10. 어린 동물 찾기

SELECT ANIMAL_ID,
       NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID

https://dydatablog.tistory.com/36

 

[SQL]WHERE절의 부정연산자_ !=, <>, NOT,NULL값이 아닐 때

같지 않다.!= : 같지 않다 : 같지 않다 (ISO표준 표기법)NOT 컬럼명 = ~보다 크지 않다. NOT 컬럼명 > A와 B 값 사이에 있지 않다. NOT BETWEEN A AND B list 값과 일치하지 않는다. NOT IN (list) NULL값을 갖지

dydatablog.tistory.com

 

 

 

11. 여러 기준으로 정렬하기

SELECT ANIMAL_ID,
       NAME,
       DATETIME
FROM ANIMAL_INS
ORDER BY NAME,
        DATETIME DESC

 

12. 이름이 el이 들어가는 동물 찾기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog'
AND NAME LIKE '%el%'
ORDER BY NAME

SQL 라이브 세션 과제

 

[문제2] Python 개발자 찾기

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE (SKILL_1= 'Python')OR (SKILL_2='Python') OR (SKILL_3='Python')
ORDER BY ID

--또는
select id
         , email
         , first_name
         , last_name
from developer_infos
where 'Python' in (skill_1, skill_2, skill_3)
order by id

 

 

 


달리기반 과제 Lv.4

 

1. 고객별로 주문 건수와 총 주문 금액을 조회하는 SQL 쿼리를 작성해주세요.

출력 결과에는 고객 이름, 주문 건수, 총 주문 금액이 포함되어야 합니다. 단, 주문을 한 적이 없는 고객도 결과에 포함되어야 합니다.

SELECT CustomerName ,
	   COUNT(CustomerName) AS 'OrderCount',
	   COALESCE (SUM(TotalAmount),0) AS 'TotalSpent' 
FROM Customer c LEFT JOIN Orders o on c.CustomerID = o.CustomerID 
GROUP BY CustomerName ;

 

2. 나라별로 총 주문 금액이 가장 높은 고객의 이름과 그 고객의 총 주문 금액을 조회하는 SQL 쿼리를 작성해주세요.

[복습 필요!!]

SELECT 
    c.Country,
    c.CustomerName AS Top_Customer,
    SUM(o.TotalAmount) AS Top_Spent
FROM 
    Customers c
JOIN 
    Orders o ON c.CustomerID = o.CustomerID
GROUP BY 
    c.Country, c.CustomerName
HAVING 
    SUM(o.TotalAmount) = (
        SELECT 
            MAX(SumSpent)
        FROM 
            (SELECT 
                 SUM(o2.TotalAmount) AS SumSpent
             FROM 
                 Customers c2
             JOIN 
                 Orders o2 ON c2.CustomerID = o2.CustomerID
             WHERE 
                 c2.Country = c.Country
             GROUP BY 
                 c2.CustomerID) AS Subquery
    );