ĐỀ TEST SQL – CHỦ ĐỀ: QUẢN LÝ Y TẾ
Thời gian làm bài: 90 phút
🎯 Mục tiêu đánh giá:
- Viết SQL chính xác
- Hiểu nghiệp vụ y tế
- Phát hiện dữ liệu bất thường
- Tư duy kiểm thử dữ liệu
I. MÔ TẢ HỆ THỐNG & CSDL
Giả định DB: MySQL / PostgreSQL
1️⃣ Bảng patients
patients (
id BIGINT PRIMARY KEY,
patient_code VARCHAR(20),
full_name VARCHAR(100),
gender VARCHAR(10),
date_of_birth DATE,
phone VARCHAR(20),
status VARCHAR(20),
created_at TIMESTAMP
)
2️⃣ Bảng doctors
doctors (
id BIGINT PRIMARY KEY,
doctor_code VARCHAR(20),
full_name VARCHAR(100),
specialty VARCHAR(100),
department VARCHAR(100),
status VARCHAR(20)
)
3️⃣ Bảng appointments
appointments (
id BIGINT PRIMARY KEY,
patient_id BIGINT,
doctor_id BIGINT,
appointment_date DATE,
appointment_time TIME,
status VARCHAR(20)
)
4️⃣ Bảng medical_records
medical_records (
id BIGINT PRIMARY KEY,
patient_id BIGINT,
doctor_id BIGINT,
diagnosis TEXT,
visit_date DATE,
note TEXT
)
5️⃣ Bảng prescriptions
prescriptions (
id BIGINT PRIMARY KEY,
medical_record_id BIGINT,
medicine_name VARCHAR(100),
dosage VARCHAR(50),
days INT
)
II. PHẦN A – SQL CƠ BẢN
⏱ Thời gian gợi ý: 35–40 phút
Câu 1: Danh sách bệnh nhân đang hoạt động
Lấy patient_code, full_name, gender, status của bệnh nhân có status = 'active'.
Câu 2: Lịch hẹn khám và bác sĩ
Liệt kê patient_code, patient_name, doctor_name, specialty, appointment_date, status.
Câu 3: Số lượng bác sĩ theo khoa
Thống kê số lượng bác sĩ theo department.
Câu 4: Lịch sử khám của bệnh nhân
Với patient_code = 'BN001', liệt kê visit_date, doctor_name, diagnosis.
Câu 5: Số lượt khám của mỗi bệnh nhân
Đếm số bản ghi medical_records của từng bệnh nhân.
III. PHẦN B – SQL NÂNG CAO
⏱ Thời gian gợi ý: 50–55 phút
Câu 6: Bệnh nhân chưa từng đi khám
Liệt kê bệnh nhân không có bản ghi trong medical_records.
Câu 7: Bác sĩ có lịch hẹn bị hủy
Liệt kê bác sĩ có ít nhất 1 lịch hẹn status = 'canceled'.
Câu 8: Bác sĩ khám nhiều bệnh nhân nhất
Tìm bác sĩ có số lượt khám nhiều nhất.
Câu 9: Lần khám gần nhất của mỗi bệnh nhân
Lấy patient_code, last_visit_date, doctor_name, diagnosis.
Câu 10: Phát hiện dữ liệu bất thường
Liệt kê appointments có patient_id không tồn tại và prescriptions có medical_record_id không tồn tại.
Câu 11 (Bonus): Tư duy hệ thống
1. Nên index những cột nào?
2. Vì sao không nên lưu tổng số lượt khám trong bảng patients?
Không có bình luận nào để hiển thị
Không có bình luận nào để hiển thị