getMessage(); } } $stats = [ 'categories' => 0, 'products' => 0, 'customers' => 0, 'orders' => 0, 'order_items' => 0, ]; if ($pdo && !$dbError) { try { foreach (array_keys($stats) as $tbl) { $stats[$tbl] = (int) $pdo->query("SELECT COUNT(*) FROM `$tbl`")->fetchColumn(); } } catch (Throwable $e) { // Bỏ qua nếu có lỗi đọc thống kê } } $exercises = [ 1 => ['dir' => 'Bai01', 'title' => 'Bài 01: Thống kê số lượng sản phẩm trong từng loại hàng', 'tech' => 'COUNT, LEFT JOIN, GROUP BY'], 2 => ['dir' => 'Bai02', 'title' => 'Bài 02: Tính tổng doanh thu từng ngày đặt hàng', 'tech' => 'SUM(quantity * price), JOIN, GROUP BY'], 3 => ['dir' => 'Bai03', 'title' => 'Bài 03: Tìm loại hàng có trên 5 sản phẩm', 'tech' => 'GROUP BY, HAVING COUNT(p.id) > 5'], 4 => ['dir' => 'Bai04', 'title' => 'Bài 04: Khách hàng có tổng chi tiêu > 1.000.000 VNĐ', 'tech' => 'JOIN, GROUP BY, HAVING SUM(...) > 1000000'], 5 => ['dir' => 'Bai05', 'title' => 'Bài 05: Tìm sản phẩm có giá cao nhất trong từng loại hàng', 'tech' => 'Subquery, MAX(price)'], 6 => ['dir' => 'Bai06', 'title' => 'Bài 06: Liệt kê các sản phẩm chưa từng được đặt hàng', 'tech' => 'LEFT JOIN, WHERE ... IS NULL'], 7 => ['dir' => 'Bai07', 'title' => 'Bài 07: Khách hàng mua nhiều số lượng sản phẩm nhất', 'tech' => 'SUM(quantity), ORDER BY DESC, LIMIT 1'], 8 => ['dir' => 'Bai08', 'title' => 'Bài 08: Tổng số lượng bán ra và doanh thu của từng loại sản phẩm', 'tech' => 'LEFT JOIN, COALESCE, SUM, GROUP BY'], 9 => ['dir' => 'Bai09', 'title' => 'Bài 09: Tìm 3 sản phẩm bán chạy nhất', 'tech' => 'SUM(quantity), ORDER BY DESC, LIMIT 3'], 10 => ['dir' => 'Bai10', 'title' => 'Bài 10: Liệt kê 5 khách hàng chi tiêu nhiều nhất', 'tech' => 'SUM(quantity * price), ORDER BY DESC, LIMIT 5'], 11 => ['dir' => 'Bai11', 'title' => 'Bài 11: Tìm loại hàng mang lại doanh thu cao nhất', 'tech' => 'SUM(quantity * price), ORDER BY DESC, LIMIT 1'], 12 => ['dir' => 'Bai12', 'title' => 'Bài 12: Liệt kê tất cả sản phẩm và số lần được đặt hàng', 'tech' => 'LEFT JOIN, COUNT, GROUP BY'], ]; ?>
Thực hành truy vấn nâng cao: JOIN, GROUP BY, HAVING, Subquery, Thống kê & Báo cáo với PDO
= htmlspecialchars($dbError) ?>
db_config.php.