Tính hiệu giữa hai cột
Trong thực tế, bạn sẽ thường phải thực hiện các phép toán trong một truy vấn, ví dụ khi muốn tính mức thay đổi dân số từ năm 2000 đến 2008. Với các phép toán trên số, các toán tử trong SQLAlchemy hoạt động giống như trong Python.
Bạn có thể dùng các toán tử này để thực hiện phép cộng (+), trừ (-), nhân (*), chia (/), và chia lấy dư (%). Lưu ý: Chúng sẽ hoạt động khác khi dùng với các kiểu cột không phải số.
Bây giờ, hãy tìm 5 bang có mức tăng dân số cao nhất trong giai đoạn 2000–2008.
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
- Định nghĩa một câu lệnh select tên
stmtđể trả về:- i) Cột bang của bảng
census(census.columns.state). - ii) Hiệu số dân giữa năm 2008 (
census.columns.pop2008) và năm 2000 (census.columns.pop2000) với nhãn'pop_change'.
- i) Cột bang của bảng
- Nhóm câu lệnh theo
census.columns.state. - Sắp xếp câu lệnh theo mức thay đổi dân số (
'pop_change') giảm dần bằng cách truyềndesc('pop_change'). - Dùng phương thức
.limit()trên câu lệnh trước đó để chỉ trả về 5 bản ghi. - Thực thi câu lệnh và
fetchall()các bản ghi. - Câu lệnh in đã được viết sẵn cho bạn. Gửi câu trả lời để xem kết quả!
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.
# Build query to return state names by population difference from 2008 to 2000: stmt
stmt = select([____, (____-____).label(____)])
# Append group by for the state: stmt_grouped
stmt_grouped = stmt.group_by(____)
# Append order by for pop_change descendingly: stmt_ordered
stmt_ordered = stmt_grouped.order_by(____)
# Return only 5 results: stmt_top5
stmt_top5 = ____
# Use connection to execute stmt_top5 and fetch all results
results = connection.execute(____).fetchall()
# Print the state and population change for each record
for result in results:
print('{}:{}'.format(result.state, result.pop_change))