Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi
    solution
    Đăng nhập
    Đăng nhập

    Đề bài: [SQL 3.1] Top 3 mã theo giá trị giao dịch từng ngày

    📖Cần ôn lý thuyết? Đọc bài giảng Buổi 3: Window Functions — khóa SQL

    Mỗi ngày, ban lãnh đạo muốn xem Top 3 mã có giá trị giao dịch lớn nhất (giá trị = close_price * volume).

    Với các ngày từ 2026-09-23 đến 2026-09-25, hãy xếp hạng các mã trong từng ngày theo giá trị giao dịch giảm dần bằng RANK() (mỗi ngày xếp hạng riêng — PARTITION BY trade_date) và chỉ giữ các mã có hạng ≤ 3. Nếu đồng hạng ở vị trí 3 thì giữ tất cả các mã đồng hạng đó (có thể ra hơn 3 mã).

    Gợi ý: không thể lọc trực tiếp theo cột hạng trong WHERE cùng cấp — hãy đặt truy vấn có hàm cửa sổ vào một truy vấn con ở mệnh đề FROM (derived table) rồi lọc ở truy vấn ngoài.

    Sắp xếp theo trade_date tăng dần, rồi hang tăng dần, rồi symbol tăng dần.

    • Định dạng đầu vào:

      Bảng MarketPrices(symbol, trade_date, close_price, volume).

    • Định dạng đầu ra:

      trade_date, hang, symbol, gia_tri (DECIMAL(18,2)) — TAB; sắp xếp theo trade_date, hang, symbol.

    Ví dụ:

    Đầu vào:

    Đầu ra:

    2026-09-23	1	FPT	658560000000.00
    2026-09-23	2	VNM	539784000000.00
    2026-09-23	3	VCS	473760000000.00
    2026-09-24	1	FPT	997920000000.00
    2026-09-24	2	VNM	545292000000.00
    2026-09-24	3	IDC	397850000000.00
    2026-09-25	1	VCB	717600000000.00
    2026-09-25	2	IDC	371000000000.00
    2026-09-25	3	FPT	360840000000.00

    Giải thích:

    Mỗi ngày đúng 3 mã đầu (không có đồng hạng ở vị trí 3).

    Chủ đề

    📊 SQLSQLSQL: Buổi 3 – Window FunctionsTất cả môn học

    Đang tải editor...