cc-sql-lab2
tratchapong
mysql
a month ago
11 kB
30
Indexable
Never
-- 1. แสดงชื่อ ที่อยู่ เงินเดือน และชื่อแผนกของพนักงานทุกคน เรียงตามชื่อแผนก select e.name, e.address, e.salary, d.name from employees e join departments d on d.id = e.department_id order by d.name; -- 2. แสดงชื่อ ราคาสินค้า ชื่อผู้จำหน่าย และเบอร์โทรของผู้จำหน่ายสินค้า select p.name, p.price, s.name, s.phone_number from products p join suppliers s on s.id = p.supplier_id; -- 3. แสดงชื่อลูกค้าและชื่อเซลล์ในแต่ละ Order select o.id, o.date, c.name, e.name from orders o join customers c on c.id = o.customer_id join employees e on e.id = o.employee_id order by o.id; -- 4. แสดงจำนวน Order ของลูกค้าแต่ละคน select c.id, c.name, count(*) order_amount from customers c join orders o on c.id = o.customer_id group by c.id order by order_amount desc; -- select * -- from orders -- where customer_id = 7; -- 5. แสดงจำนวน Order ของเซลล์แต่ละคน select e.id, e.name, d.name, count(*) order_amount from employees e join orders o on e.id = o.employee_id join departments d on d.id = e.department_id where d.name ='ฝ่ายขาย' group by e.id; -- 6. จงหาชื่อ Supplier และจำนวน Product ที่แตกต่างกันทั้งหมดของแต่ละ Supplier select s.id, s.name, count(*) 'num' from suppliers s join products p on s.id = p.supplier_id group by s.id; -- 7. แสดงชื่อ supplier ที่มี product ราคามากกว่า 800 อย่างน้อย 1 ชนิด select distinct s.name from products p join suppliers s on s.id = p.supplier_id where p.price > 800; -- 8. แสดงชื่อของ employee ทีอยู่ในแผนกฝ่ายขาย select d.id, d.name, e.name from employees e join departments d on d.id = e.department_id where d.name='ฝ่ายขาย'; -- 9. แสดงค่าเฉลี่ยของเงินเดือน Employee ในแต่ละแผนก select d.id, d.name, format( avg(e.salary), 2) as avg_salary from employees e join departments d on d.id = e.department_id group by d.id order by d.id; -- 10. แสดงยอดขายรวมทั้งหมด select sum(price*amount*(1-discount)) from order_items; -- select sum(price*amount*(1-discount)) -- from order_items -- where id=16 -- (800 * 2 * 0.95) -- 11. แสดงยอดขายรวมในแต่ละวัน select o.date, format( sum(oi.price * oi.amount * (1-oi.discount) ),2) total from order_items oi join orders o on o.id = oi.order_id group by o.date; -- select o.date, sum(price * amount * (1-discount)) -- from order_items oi -- join orders o on o.id = oi.order_id -- where o.date = '2021-02-01'; -- 12. แสดงชื่อลูกค้าและยอดซื้อรวมของลูกค้าแต่ละคน select c.id, c.name, format( sum(oi.price * oi.amount * (1-oi.discount) ),2) total from customers c join orders o on c.id = o.customer_id join order_items oi on o.id = oi.order_id group by c.id; -- 13. แสดงชื่อเซลล์และยอดขายของเซลล์แต่ละคน select e.id, e.name, format( sum(oi.price * oi.amount * (1-oi.discount) ),2) total from employees e join orders o on e.id = o.employee_id join order_items oi on o.id = oi.order_id group by e.id; -- 14. แสดงยอดขายรวมของแต่ละ Product โดยแสดงเฉพาะที่มียอดต่ำกว่า 20000 select p.id, p.name, sum(oi.price * oi.amount * (1-oi.discount) ) total from products p join order_items oi on p.id = oi.product_id group by p.id having total < 20000 ; -- 15. แสดงชื่อ Product ที่มียอดขายมากที่สุด 5 อันดับแรก รวมถึงชื่อ supplier ด้วย select s.name, p.id, p.name, sum(oi.price * oi.amount * (1-oi.discount) ) total from products p join order_items oi on p.id = oi.product_id join suppliers s on s.id = p.supplier_id group by p.id order by total desc limit 5; -- 16. แสดง product ที่มีจำนวนชิ้นในการขายมากสุด select p.id, p.name, sum(oi.amount) total_amount from products p join order_items oi on p.id = oi.product_id group by p.id order by total_amount desc limit 1; -- 17. แสดงข้อมูลว่า ลูกค้าแต่ละคนซื้อ product ใดบ้าง และมียอดสั้งซื้อของแต่ละ product เท่าใด select c.id, c.name, p.id, p.name, sum(oi.price*oi.amount*(1-discount)) total from customers c join orders o on c.id = o.customer_id join order_items oi on o.id = oi.order_id join products p on p.id = oi.product_id group by c.id, p.id; -- 18. แสดงชื่อลูกค้าที่มียอดสั่งไฮยีน่ามากสุด 5 อันดับแรก select c.name, p.name, sum(oi.price*oi.amount*(1-discount)) total from customers c join orders o on c.id = o.customer_id join order_items oi on o.id = oi.order_id join products p on p.id = oi.product_id where p.name like "%ยีน่า%" group by c.id, p.id order by total desc limit 5; -- 19. จงหาชื่อ customer ที่มียอดสั่งซื้อมากกว่า 10000 select c.name, sum(oi.price*oi.amount*(1-discount)) total from customers c join orders o on c.id = o.customer_id join order_items oi on o.id = oi.order_id group by c.id having total > 10000 order by total desc; -- 20. แสดงชื่อเซลล์และยอดขาย เฉพาะคนที่ยอดขายมากกว่าค่าเฉลี่ย (ยอดรวม / ตามจำนวน sales (ฝ่ายขาย)) -- select count(*) sales_num -- from employees e -- where e.department_id = 6; -- select sum(oi.price*oi.amount*(1-discount)) total -- from order_items oi; -- select e.name,sum(oi.price*oi.amount*(1-discount)) total, count(*) -- from employees e -- join orders o on e.id = o.employee_id -- join order_items oi on o.id = oi.order_id -- group by e.id; -- -------- WITH sales_num_cte AS ( SELECT count(*) AS sales_num FROM employees e WHERE e.department_id = 6 ), total_sales_cte AS ( SELECT sum(oi.price * oi.amount * (1 - discount)) AS total_sales FROM order_items oi ), avg_sales_cte AS ( select total_sales / sales_num as avg_sales from sales_num_cte, total_sales_cte ) select e.name,sum(oi.price*oi.amount*(1-discount)) total from employees e join orders o on e.id = o.employee_id join order_items oi on o.id = oi.order_id group by e.id having total > (select avg_sales from avg_sales_cte); -- 21. แสดงชื่อ employee ที่ไม่มียอดขาย และแสดงลูกค้าที่ไม่มียอดซื้อ (2 results) -- select * -- from employees -- where id not in -- (select distinct e.id -- from employees e -- join orders o on e.id = o.employee_id -- order by e.id); select * from employees where id not in (select distinct employee_id from orders where employee_id is not null); select * from customers where id not in (select distinct customer_id from orders where customer_id is not null); select * from employees e left join orders o on e.id=o.employee_id where o.id is null group by e.id ; -- 22. จงหาชื่อลูกค้าและยอดซื้อโดยที่ยอดซื้อมีค่าสูงที่สุดในกลุ่มลูกค้าที่มียอดซื้อต่ำกว่าค่าเฉลี่ย WITH cust_num_cte AS ( SELECT count(*) AS cust_num FROM customers ), total_sales_cte AS ( SELECT sum(price * amount * (1 - discount)) AS total_sales FROM order_items ), avg_sales_cte AS ( select total_sales / cust_num as avg_sales from cust_num_cte, total_sales_cte ) select c.name,sum(oi.price*oi.amount*(1-discount)) total from customers c join orders o on c.id = o.customer_id join order_items oi on o.id = oi.order_id group by c.id having total < (select avg_sales from avg_sales_cte) order by total desc limit 1; -- 23. จงหาชื่อลูกค้าที่มีออเดอร์จากการซื้อแบบไม่ผ่านเซลล์มากสุด select c.name, sum(oi.price*oi.amount*(1-discount)) total from orders o join customers c on c.id=o.customer_id join order_items oi on o.id=oi.order_id where o.employee_id is null group by c.id order by total desc limit 1; -- 24. จงหาชื่อลูกค้าที่ไม่เคยซื้อสินค้าจากผู้ผลิตไท เอฟเวอเรสต์ select * from customers where id not in (select distinct c.id from orders o join customers c on c.id=o.customer_id join order_items oi on o.id=oi.order_id join products p on p.id=oi.product_id join suppliers s on s.id=p.supplier_id where s.name like 'ไท เอฟเวอเรสต์' order by id ); -- 25. จงหาชื่อลูกค้าที่เคยซื้อน้ำดื่มคชสารและน้ำดื่มแมมมอธ select distinct c.id from orders o join customers c on c.id=o.customer_id join order_items oi on o.id=oi.order_id join products p on p.id=oi.product_id where p.name like '%คชสาร%' and c.id in (select distinct c.id from orders o join customers c on c.id=o.customer_id join order_items oi on o.id=oi.order_id join products p on p.id=oi.product_id where p.name like '%แมมมอธ%' ) order by c.id ; -- 26. จงหาชื่อลูกค้าที่เคยซื้อไท อาเซียน แอตแลนติกแต่ไม่เคยซื้อไท เอฟเวอเรสต์ select distinct c.id, c.name from orders o join customers c on c.id=o.customer_id join order_items oi on o.id=oi.order_id join products p on p.id=oi.product_id join suppliers s on s.id=p.supplier_id where s.name like '%อาเซียน%' and c.id not in (select distinct c.id from orders o join customers c on c.id=o.customer_id join order_items oi on o.id=oi.order_id join products p on p.id=oi.product_id join suppliers s on s.id=p.supplier_id where s.name like '%เอฟเวอเรสต์%' );
Leave a Comment