ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
ဒီ Practice Set 2 က Practice Set 1 ထက် level တစ်ဆင့်တက်ပြီး JOIN, GROUP BY, HAVING, aggregate function တွေကို ပေါင်းသုံးရတဲ့ task တွေဖြစ်ပါတယ်။ Table တစ်ခုတည်းက data ကို ကြည့်ရုံနဲ့ မလုံလောက်တော့ဘဲ table 2-3 ခုကို ချိတ်ဆက်ပြီး summary ထုတ်တဲ့ practical scenario တွေနဲ့ ရင်ဆိုင်ရမှာပါ။ Bookstore project မှာသုံးခဲ့တဲ့ Books, Authors, Orders, Customers table တွေကိုပဲ ဆက်သုံးမှာဖြစ်လို့ structure ကို အရင်ပြန်သတိရပါ။ Task တွေကို ကိုယ်တိုင် query ရေးကြိုးစားပြီးမှ sample answer ကို ကိုးကားပါ - ဒီအဆင့်က real project မှာ တွေ့ရမယ့် report writing pattern တွေနဲ့ အနီးစပ်ဆုံးဖြစ်ပါတယ်။
လေ့ကျင့်ခန်းများ
Task 1: Books INNER JOIN Authors လုပ်ပြီး AuthorName အလိုက် book count ကို COUNT() + GROUP BY နဲ့ ထုတ်ပါ (author တစ်ယောက်က book ဘယ်နှစ်အုပ် ရေးလဲ)။ Task 2: Orders INNER JOIN Books လုပ်ပြီး book title အလိုက် စုစုပေါင်း ဘယ်နှစ်စောင်ရောင်းရလဲ (SUM(Quantity)) ကို GROUP BY Title နဲ့ ရှာပြီး, အရောင်းအများဆုံး 3 ခုကို ORDER BY DESC + LIMIT 3 နဲ့ ထုတ်ပါ။ Task 3: Customers LEFT JOIN Orders လုပ်ပြီး တစ်ခါမှ order မတင်ဖူးသေးတဲ့ customer ကို HAVING COUNT(Orders.OrderID) = 0 နဲ့ ရှာပါ။
Code နမူနာ
-- Task 1: Book count per author
SELECT Authors.AuthorName, COUNT(Books.BookID) AS TotalBooks
FROM Books
INNER JOIN Authors ON Books.AuthorID = Authors.AuthorID
GROUP BY Authors.AuthorName;
-- Task 2: Top 3 best-selling books
SELECT Books.Title, SUM(Orders.Quantity) AS TotalSold
FROM Orders
INNER JOIN Books ON Orders.BookID = Books.BookID
GROUP BY Books.Title
ORDER BY TotalSold DESC
LIMIT 3;
-- Task 3: Customers who never ordered
SELECT Customers.CustomerName, COUNT(Orders.OrderID) AS OrderCount
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
GROUP BY Customers.CustomerName
HAVING COUNT(Orders.OrderID) = 0;Task 3 ခုစလုံးက author book count, top 3 best-seller list, order မတင်ဖူးသေးတဲ့ customer list ကို table အနေနဲ့ တစ်ခုစီ ထုတ်ပြပါလိမ့်မယ်။၅ မိနစ် စမ်းကြည့်
Task 2 ရဲ့ query ကို Total revenue (SUM(Quantity * Price)) အလိုက် top 3 ပြောင်းရေးကြည့်ပါ - Books table ကို JOIN ထပ်ထည့်ရပါလိမ့်မယ် - 5 minutes အတွင်း စမ်းကြည့်ပါ။
သတိလေးတစ်ချက်
LEFT JOIN နဲ့ 'မရှိတာ' ကို ရှာတဲ့အခါ GROUP BY + HAVING COUNT() = 0 နည်းနဲ့ WHERE ... IS NULL နည်း နှစ်မျိုးလုံး ရနိုင်ပေမယ့် logic ကွာနိုင်လို့ result ကို compare လုပ်ပြီးမှ project မှာ actual သုံးပါ။