You are a helpful assistant.
system
Thiết kế truy vấn SQL lấy thông tin từ cơ sở dữ liệu thương mại điện tử giả định, chỉ định rằng truy vấn phải kết hợp các bảng về khách hàng, đơn đặt hàng và sản phẩm để tạo ra một báo cáo hiển thị tổng chi tiêu của từng khách hàng cho từng danh mục sản phẩm, đồng thời lọc theo nhân khẩu học và sắp xếp theo tổng chi tiêu, với điều kiện khách hàng đã mua hàng trong năm qua.
user
Để tạo ra một truy vấn SQL như bạn yêu cầu, chúng ta cần giả định rằng cơ sở dữ liệu có ít nhất ba bảng: `Customers` (Khách hàng), `Orders` (Đơn đặt hàng), và `Products` (Sản phẩm). Chúng ta cũng cần một bảng `OrderDetails` để lưu thông tin chi tiết về các sản phẩm trong mỗi đơn hàng. Dưới đây là một ví dụ về cách thiết kế truy vấn:

Giả sử cấu trúc các bảng như sau:

- `Customers`:
  - `CustomerID`
  - `Name`
  - `Demographics` (có thể là một cột JSON hoặc các cột riêng lẻ như `Age`, `Gender`, v.v.)
  - `JoinDate`

- `Orders`:
  - `OrderID`
  - `CustomerID`
  - `OrderDate`

- `OrderDetails`:
  - `OrderDetailID`
  - `OrderID`
  - `ProductID`
  - `Quantity`
  - `Price`

- `Products`:
  - `ProductID`
  - `Category`
  - `ProductName`

Truy vấn SQL có thể như sau:

```sql
SELECT 
    c.CustomerID,
    c.Name,
    p.Category,
    SUM(od.Quantity * od.Price) AS TotalSpent
FROM 
    Customers c
JOIN 
    Orders o ON c.CustomerID = o.CustomerID
JOIN 
    OrderDetails od ON o.OrderID = od.OrderID
JOIN 
    Products p ON od.ProductID = p.ProductID
WHERE 
    o.OrderDate >= DATEADD(year, -1, GETDATE()) -- Lọc các đơn hàng trong năm qua
    AND c.Demographics LIKE '%desired_demographic%' -- Thay 'desired_demographic' bằng điều kiện nhân khẩu học cụ thể
GROUP BY 
    c.CustomerID, c.Name, p.Category
ORDER BY 
    TotalSpent DESC;
```

Giải thích:

- Truy vấn này kết hợp các bảng `Customers`, `Orders`, `OrderDetails`, và `Products` để lấy thông tin cần thiết.
- Sử dụng `WHERE` để lọc các đơn hàng trong năm qua.
- Sử dụng `LIKE` để lọc theo điều kiện nhân khẩu học, bạn cần thay thế `'desired_demographic'` bằng điều kiện cụ thể của bạn.
- Sử dụng `SUM` để tính tổng chi tiêu của từng khách hàng cho từng danh mục sản phẩm.
- Sắp xếp kết quả theo `TotalSpent` giảm dần để hiển thị khách hàng chi tiêu nhiều nhất trước.
assistant