본문 바로가기
전산 관련 시험/DB(SQLP, SQLD) 문제풀이

전산 교육 정리_SQL(2)

by 응_비 2023. 5. 11.

각 주문별로 판매된 상품명이 궁금합니다. 같이 출력해 보세요

SELECT OrderDetailID, OrderID, ProductID, ProductName
FROM orderdetails
	INNER JOIN products 
		USING(productid)
ORDER BY orderdetailid;

상품의 상품별로 판매수량과 금액을 출력하세요.

SELECT orderdetailid, orderid, productid, productname, price, quantity, price*quantity as 금액
FROM orderdetails
	INNER JOIN products
    	USING(productid)
ORDER BY orderdetailid;

주문에 대해 상품별로 판매수량과 금액을 출력하되 제품 ID가 4보다 작은 경우만 선별하려면

SELECT orderdetailid, orderid, productid, productname, price, quantity, 
price*quantity as 금액
FROM orderdetails 
INNER JOIN products 
USING(productid)
WHERE productID < 4
ORDER BY orderdetailid;

제품명이 Filo Mix 또는 Chang인 제품을 공급자 이름과 같이 출력하세요

[ using(supplierID) 활용 ]

SELECT p.ProductName, s.SupplierName
FROM products p, suppliers s 
WHERE (p.ProductName = "Filo Mix" OR p.ProductName="Chang" )
and p.supplierID=s.supplierID;
SELECT p.productName, s.supplierName
FROM products p 
INNER JOIN suppliers s using(supplierID)
WHERE p.productname="Filo Mix" or p.productname="Chang" ;

주문별 제품의 판매금액을 기준으로 20%의 영업 수당을 산출해 보세요.

SELECT orderdate, employeeid, 
	orderid, (quantity* price) as 금액, Round(quantity* price*0.2, 2) as 수당
FROM orders INNER JOIN orderdetails USING(orderid)
		INNER JOIN products USING(productid) 
ORDER BY orderid;

+ 영업사원 이름도 같이 출력되게 하려면 ? -> concat()함수 활용(lastname, firstname 합성)

SELECT orderdate, employeeid, concat(LastName, FirstName),
	orderid, (quantity* price) as 금액, Round(quantity* price*0.2, 2) as 수당
FROM orders INNER JOIN orderdetails USING(orderid)
		INNER JOIN products USING(productid) INNER JOIN employees USING(EmployeeID)
ORDER BY orderid;

각 주문의 상품별 금액이 4000$이상인 제품을 출력해 보세요

SELECT OrderDetailID, OrderID, ProductID, ProductName, Quantity * Price as "금액"
FROM OrderDetails
INNER JOIN Products USING(ProductID) 
WHERE (Quantity * Price) >= 4000 
ORDER BY OrderDetailID;

각 주문의 상품별 금액이 4000$이상 제품들이 어떤 류인지 카테고리가 궁금합니다. 출력해 보십시요. !! 수정 !! 

SELECT OrderDetailID, OrderID, ProductID, ProductName, Quantity * Price as "금액", CategoryID
FROM OrderDetails
INNER JOIN Products USING(ProductID) INNER JOIN Categories USING(categoryID)
WHERE (Quantity * Price) >= 4000 
ORDER BY OrderDetailID;

아무런 시험도 보지 않은 사람 출력 (UNION)

힌트 : 어떤 시험이든 치른사람을 a라 할 때 - 전체명단과 a를 left조인하면??

진학반명단 원부 left join 어떤 시험이든 치른 사람 -> 아무런 시험도 보지 않은 사람 출력

select * from 진학반명단
	left join (select * from 입시생 union
    select * from 자격증응시생) as 응시생 using(id)
where 응시.id is null;

 

[ Group by ]

- 앞에서 주문된 상품별로 금액과 20%의 수당을 산출한 바 있습니다. 주문별로 합계를 산출해 보세요

SELECT OrderDate, EmployeeID, OrderID, 
sum(quantity* price) as 금액, round(sum(quantity*price*0.2), 2) as 수당
FROM Orders INNER JOIN OrderDetails using(OrderID)
INNER JOIN Products using(ProductID)
GROUP BY OrderID ORDER BY OrderID;

영업사원별 주문 성사금액이 40,000$ 이상인 사람에 대해 25%의 특별수당을 산출해 보세요

SELECT EmployeeID, 
	round(sum(quantity* price), 2) as 금액, 
	round(sum(quantity* price*0.25), 2) as 특별수당
FROM Orders INNER JOIN OrderDetails using(OrderID)
INNER JOIN Products using(ProductID)
GROUP BY EmployeeID
HAVING sum(quantity * price) >= 40000;

제품번호에 맞춰 제품명과 판매 수량을 출력해 보세요

SELECT ProductID, ProductName,sum(Quantity) as 판매수량
FROM OrderDetails
INNER JOIN Products using(ProductID) 
group by ProductID 
order by ProductID;

상품별로 주문에 등장한 횟수가 큰것부터 나열해 보세요

SELECT ProductID, ProductName, COUNT(*) AS 주문횟수
FROM OrderDetails
INNER JOIN Products using(ProductID) 
group by ProductID 
order by COUNT(*) DESC, productid asc;

판매금액 기준으로 봤을 때 기여도가 높은 제품 10개만 출력해 보세요.

SELECT p.productid, p.productname
, sum(p.price * o.quantity) as 판매금액
FROM orderdetails o 
INNER JOIN products p using(productid) 
group by p.productid, p.ProductName
order by 판매금액 desc limit 10;

조건에 따라 처리하기(Case When)

SELECT 가격분류, count(Price) 
FROM
( SELECT Price, 
CASE WHEN Price <=20 THEN "1.초저가류"
WHEN Price>20 AND Price <=35 THEN "2.저가류" 
WHEN Price >35 AND Price <=50 THEN "3.중가류" 
WHEN Price >50 AND Price <=80 THEN "4.고가류" 
ELSE "5.초고가류" 
END AS 가격분류
FROM Products) as p 
GROUP BY 가격분류;

< 연산도우미 –함수(Function)사용 >

1) Insert("BEAUTIFUL", 2, 4, "KK") : BKKIFUL (문자열의 부분문자열 교체, 2번째부터 4개)

2) Instr("BEAUTIFUL", "AUT") : 3 (부분문자열 위치, 없으면 0)

3) dateDiff('2022-08-15', '2022-09-03') : -19 ( 날짜 차이를 반환)

Products 테이블에서 가격(Price)이 가장 큰 제품의 거래현황을 출력

SELECT
	@mp:=max(price)
FROM products;

SELECT ProductID, ProductName, Price INTO @id, @n, @p
FROM Products 
ORDER BY Price DESC limit 1
SELECT *
FROM products
WHERE price = @mp;

SELECT *, @n as 품명, @p as 단가
FROM OrderDetails 
WHERE ProductID =@ID;

 

'전산 관련 시험 > DB(SQLP, SQLD) 문제풀이' 카테고리의 다른 글

전산 교육 테스트 대비_SQL  (0) 2023.05.14
전산 교육 정리_SQL(3)  (0) 2023.05.12
전산 교육 정리_SQL(1)  (0) 2023.05.10
DB_뷰와 시스템 카탈로그  (0) 2022.12.04
DB_관계대수와 SQL  (0) 2022.11.30

댓글