Xác định tỷ lệ phụ nữ tổng thể
Bạn có thể kết hợp các hàm và toán tử trong cùng một câu lệnh select.
Những kết hợp này đặc biệt hữu ích khi muốn tính phần trăm hoặc
trung bình, và bạn cũng có thể dùng biểu thức case() để thao tác
trên dữ liệu thỏa điều kiện cụ thể mà không ảnh hưởng đến toàn bộ truy vấn.
Biểu thức case() nhận một danh sách các điều kiện cần khớp và cột sẽ
trả về nếu điều kiện khớp, theo sau là else_ nếu không có điều kiện nào
khớp. Ta có thể bọc toàn bộ biểu thức này trong bất kỳ hàm hoặc phép toán nào.
Khi thực hiện phép chia số nguyên, ta thường muốn nhận về số thực (float). Dù một số cơ sở dữ liệu
làm điều này tự động, bạn có thể dùng hàm cast() để chuyển một
biểu thức sang kiểu cụ thể.
Bài tập này là một phần của khóa học
Nhập môn Cơ sở dữ liệu với Python
Hướng dẫn bài tập
- Import
case,castvàFloattừsqlalchemy. - Xây dựng biểu thức
female_pop2000để tính dân số nữ năm 2000. Để làm điều này:- Dùng
case()bên trongfunc.sum(). - Đối số thứ nhất của
case()là một danh sách chứa một tuple gồm- i) Một biểu thức boolean kiểm tra
census.columns.sexbằng'F'. - ii) Cột
census.columns.pop2000.
- i) Một biểu thức boolean kiểm tra
- Đối số thứ hai là điều kiện
else_, đặt bằng 0.
- Dùng
- Tính tổng dân số năm 2000 và dùng
cast()để chuyển sangFloat. - Xây dựng truy vấn để tính phần trăm phụ nữ năm 2000. Thực hiện bằng cách lấy
female_pop2000chia chototal_pop2000rồi nhân100. - Thực thi truy vấn và in
percent_female.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# import case, cast and Float from sqlalchemy
from sqlalchemy import ____, ____, ____
# Build an expression to calculate female population in 2000
female_pop2000 = func.sum(
____([
(____ == ____, ____)
], else_=____))
# Cast an expression to calculate total population in 2000 to Float
total_pop2000 = cast(func.sum(____), ____)
# Build a query to calculate the percentage of women in 2000: stmt
stmt = select([____ / ____* 100])
# Execute the query and store the scalar result: percent_female
percent_female = connection.execute(____).scalar()
# Print the percentage
print(____)