Tính giá trị trong truy vấn

Nhập môn Cơ sở dữ liệu với Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Toán tử số học

  • cộng +
  • trừ -
  • nhân *
  • chia /
  • chia lấy dư %
  • Hoạt động khác nhau trên các kiểu dữ liệu khác nhau
Nhập môn Cơ sở dữ liệu với Python

Tính chênh lệch

stmt = select([census.columns.age,           
        (census.columns.pop2008 -
        census.columns.pop2000).label('pop_change')
    ])

stmt = stmt.group_by(census.columns.age) stmt = stmt.order_by(desc('pop_change'))
stmt = stmt.limit(5)
results = connection.execute(stmt).fetchall() print(results)
[(61, 52672), (85, 51901), (54, 50808), (58, 45575),
(60, 44915)]
Nhập môn Cơ sở dữ liệu với Python

Câu lệnh CASE

  • Dùng để xử lý dữ liệu khác nhau theo điều kiện
  • Nhận danh sách điều kiện và cột trả về khi điều kiện khớp
  • Kết thúc bằng mệnh đề else để xử lý bản ghi không khớp điều kiện nào trước đó
Nhập môn Cơ sở dữ liệu với Python

Ví dụ CASE

from sqlalchemy import case

stmt = select([ func.sum( case([ (census.columns.state == 'New York', census.columns.pop2008) ], else_=0))])
results = connection.execute(stmt).fetchall() print(results)
[(19465159,)]
Nhập môn Cơ sở dữ liệu với Python

Câu lệnh CAST

  • Chuyển dữ liệu sang kiểu khác
  • Hữu ích để chuyển...
    • số nguyên sang số thực để chia
    • chuỗi sang ngày giờ
  • Nhận một cột hoặc biểu thức và kiểu đích
Nhập môn Cơ sở dữ liệu với Python

Ví dụ tính phần trăm

from sqlalchemy import case, cast, Float

stmt = select([ (func.sum( case([ (census.columns.state == 'New York', census.columns.pop2008) ], else_=0)) / cast(func.sum(census.columns.pop2008), Float) * 100).label('ny_percent')])
results = connection.execute(stmt).fetchall() print(results)
[(Decimal('6.4267619765'),)]
Nhập môn Cơ sở dữ liệu với Python

Ayo berlatih!

Nhập môn Cơ sở dữ liệu với Python

Preparing Video For Download...