본문 바로가기
Database

[DB]기초 쿼리문 예제

by khc9154 2023. 2. 17.

 

zcompany.sql
0.01MB
zmoney.sql
0.00MB
zpan.sql
0.00MB
zproduct.sql
0.00MB

2023년 매입매출을 보여주세요
   1. 날짜, 구분, 거래처명, 제품명, 제품규격, 수량, 단가 합계
   2. 날짜, 구분, 거래처명, (제품명+제품규격), 수량, 단가 합계

 

SELECT  a.indate, a.type, b.cname, c.pname, c.psize, a.cnt, a.price, a.total  FROM zpan as a LEFT JOIN zcompany as b on a.cid = b.id LEFT JOIN zproduct as c on c.id = a.pid 
WHERE SUBSTRING(a.indate,1,4) = '2023';

SELECT a.indate, a.type, b.cname, CONCAT(c.pname,' ', c.psize), a.cnt, a.price, a.total FROM zpan as a LEFT JOIN zcompany as b on a.cid = b.id LEFT JOIN zproduct as c on c.id = a.pid 
WHERE a.indate BETWEEN '2023-01-01' AND '2023-12-31';

 

 

2023년 거래처별, 구분별 합계를 보여주세요(매출,매입)
   1. 거래처명, 구분, 합계

2023년 거래처별, 구분별 금액합계을 보여주세요(입금,지급)
   2. 거래처명, 구분, 금액합계

 

 

SELECT b.cname, a.type, SUM(a.total)  FROM zpan as a LEFT JOIN zcompany as b on a.cid = b.id WHERE SUBSTRING(a.indate,1,4)= '2022' GROUP BY a.cid, a.type ORDER BY b.cname, a.type;

SELECT b.cname, a.type, SUM(a.money) FROM zmoney as a LEFT JOIN zcompany as b on a.cid = b.id WHERE SUBSTRING(a.indate,1,4)= '2023' GROUP BY a.cid, a.type ORDER BY b.cname, a.type;

 

 

 

 

 

 

2023년 매입,매출,입금,지급을 UNION ALL 을 사용하여 보여주세요
   1. 날짜, 거래처명, 구분, (제품명+제품규격) 또는 결제방법, 수량, 단가, 합계, 금액 
     정렬 : 날짜, 생성일

 

 

SELECT a.indate as sort1, b.cname, a.type, CONCAT(c.pname,' ', c.psize), a.cnt, a.price, a.total, a.dtcreate as sort2 FROM zpan as a LEFT JOIN zcompany as b on a.cid = b.id LEFT JOIN zproduct as c on c.id = a.pid WHERE a.indate BETWEEN '2023-01-01' AND '2023-12-31'
UNION ALL
SELECT a.indate as sort1, b.cname, a.type, a.method, '', '', a.money, a.dtcreate as sort2 FROM zmoney as a LEFT JOIN zcompany as b on a.cid = b.id  WHERE a.indate BETWEEN '2023-01-01' AND '2023-12-31'
ORDER BY sort1, sort2;

 

 

 

GROUP BY 사용해보기

 

SELECT b.cname, a.type, SUM(a.total), 0, 0, 0 FROM zpan as a LEFT JOIN zcompany as b on a.cid=b.id WHERE type='매출' GROUP BY a.cid
UNION ALL
SELECT b.cname, a.type, 0, SUM(a.total), 0, 0 FROM zpan as a LEFT JOIN zcompany as b on a.cid=b.id WHERE type='매입' GROUP BY a.cid
UNION ALL
SELECT b.cname, a.type, 0, 0, SUM(a.money), 0  FROM zmoney as a LEFT JOIN zcompany as b on a.cid=b.id WHERE type='입금' GROUP BY a.cid
UNION ALL
SELECT b.cname, a.type, 0, 0, 0, SUM(a.money) FROM zmoney as a LEFT JOIN zcompany as b on a.cid=b.id WHERE type='지급' GROUP BY a.cid
ORDER BY cname, type;

 

IF문으로 만들어보기

 

SELECT b.cname, a.type, SUM(IF(a.type='매출', a.total, 0)), SUM(IF(a.type='매입', a.total, 0)), 0, 0 
FROM zpan as a LEFT JOIN zcompany as b on a.cid=b.id 
GROUP BY a.cid

UNION ALL
SELECT b.cname, a.type, 0, 0, SUM(IF(a.type='입금', a.money, 0)), SUM(IF(a.type='지급', a.money, 0)) 
FROM zmoney as a LEFT JOIN zcompany as b on a.cid=b.id
GROUP BY a.cid

ORDER BY cname;

 

1. 2023년 매출은?

SELECT SUM(total) from zpan WHERE SUBSTRING(indate,1,4) = '2023' and type = '매출';

 

거래처명 매출 매입 지금 입금 잔액을 한줄로 표시

 

UPDATE zcompany SET tmoney = 0;
UPDATE zcompany SET tmoney = smoney
+ IFNULL((SELECT SUM(total) FROM zpan WHERE zpan.cid = zcompany.id and type = '매출'),0)
- IFNULL((SELECT SUM(total) FROM zpan WHERE zpan.cid = zcompany.id and type = '매입'),0)
+ IFNULL((SELECT SUM(money) FROM zmoney WHERE zmoney.cid = zcompany.id and type = '지급'),0)
-IFNULL((SELECT SUM(money) FROM zmoney WHERE zmoney.cid = zcompany.id and type = '입금'),0);

 

SELECT a.cname, SUM(t1), SUM(t2), SUM(t3), SUM(t4),tmoney,(smoney+SUM(t1)-SUM(t2)+SUM(t3)-SUM(t4))  
FROM(
	SELECT cid as s1, SUM(IF(type='매출', total, 0)) as t1, SUM(IF(type='매입', total, 0)) as t2, 0 as t3, 0 as t4 
	FROM zpan 
	GROUP BY cid

	UNION ALL
	SELECT cid as s1, 0 as t1, 0 as t2, SUM(IF(type='지급', money, 0)) as t3, SUM(IF(type='입금', money, 0)) as t4
	FROM zmoney 
	GROUP BY cid
) as k 
LEFT JOIN zcompany as a on k.s1=a.id
GROUP BY s1;

 

 

'Database' 카테고리의 다른 글

[DB] 외부/다른서버에서 DB서버로 접속하게 설정하는 방법  (0) 2023.03.17
[DB]JOIN문  (0) 2023.02.15
[DB]데이터 다루기  (0) 2023.02.15
[DB]기초 Query문  (0) 2023.02.15
[DB]설계하기  (0) 2023.02.15