KEEP GOING

[MySQL] 기출 예제 정리 본문

code review/sql

[MySQL] 기출 예제 정리

jmHan 2021. 12. 2. 22:51
반응형

 

 

 

 

[모음으로 끝나지 않는 도시명 구하기]

SELECT DISTINCT CITY FROM STATION WHERE RIGHT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u')

- RIGHT(컬럼명, n): 컬럼명 기준 오른쪽에서 n번째까지의 글자 

 

[직업과 해당 직업을 가지고 있는 사람 수 조회하기]

* 'There are a total of 3 teachers'와 같이 출력할 것.

* 해당 직업을 가진 사람 수를 기준으로 오름차순, 만약 사람 수가 같다면 직업 알파벳 순으로 정렬할 것.

SELECT CONCAT(NAME, '(', LEFT(OCCUPATION, 1), ')') FROM OCCUPATIONS ORDER BY NAME ASC;

SELECT CONCAT('There are a total of ', COUNT(OCCUPATION), ' ', LOWER(OCCUPATION), 's.') 
FROM OCCUPATIONS 
GROUP BY OCCUPATION 
ORDER BY COUNT(OCCUPATION), OCCUPATION;

- CONCAT(문자열1, 문자열2, ...): 문자열 붙이기

- LOWER(문자열): 소문자로 변환

 

[카트에 담긴 음식 쌍, 카운트 수 조회하기]

*ddl script

CREATE TABLE CART_PRODUCTS
( 
    ID INT UNSIGNED PRIMARY KEY,
    CART_ID INT, 
    NAME  VARCHAR(20),
    COST INT
);

INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1111, 30, 'banana', 3000);
INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1112, 30, 'mango', 3500);
INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1113, 30, 'salad', 4000);

INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1114, 31, 'fish', 7000);
INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1115, 31, 'pinut', 1000);
INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1116, 31, 'pinut', 1000);

INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1117, 32, 'banana', 3000);
INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1118, 32, 'icecream', 1500);

INSERT INTO CART_PRODUCTS (ID, CART_ID, NAME, COST) VALUES (1119, 33, 'juice', 2200);

* 위와 같은 CART_PRODUCTS 테이블이 존재할 때, 각 카트에 담긴 음식 쌍과 CART_ID, 해당 카트에 담긴 음식 쌍의 카운트 수를 조회하시오. 

 

1. 카트에 담긴 음식 쌍 조회하기

SELECT CP1.ID, CP1.CART_ID, CP1.NAME, CP2.NAME
FROM CART_PRODUCTS CP1 INNER JOIN CART_PRODUCTS CP2 ON CP1.CART_ID = CP2.CART_ID
WHERE CP1.ID > CP2.ID
ORDER BY CP1.CART_ID;

 

2. (최종) 카트에 담긴 음식 쌍, 카운트 수, 카트 아이디 조회하기

SELECT CP1.CART_ID
     , CP1.NAME AS 'NAME1'
     , CP2.NAME AS 'NAME2'
     , COUNT(*) AS 'COUNT' 
FROM CART_PRODUCTS CP1 INNER JOIN CART_PRODUCTS CP2 ON CP1.CART_ID = CP2.CART_ID
WHERE CP1.ID > CP2.ID
GROUP BY CP1.CART_ID, CP1.NAME, CP2.NAME
ORDER BY CP1.CART_ID;

 

반응형
Comments