在查詢中計算數值

Python 資料庫入門

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

數學運算子

  • 加法 +
  • 減法 -
  • 乘法 *
  • 除法 /
  • 取餘 %
  • 不同資料型別行為不同
Python 資料庫入門

計算差值

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)]
Python 資料庫入門

CASE 敘述

  • 依條件對資料採不同處理
  • 接受條件清單;符合時回傳指定欄位
  • 以 else 子句結尾,處理未符合任何條件的紀錄
Python 資料庫入門

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,)]
Python 資料庫入門

CAST 敘述

  • 轉換資料為另一種型別
  • 常見用途:
    • 除法用整數轉浮點數
    • 將字串轉日期與時間
  • 接受欄位或運算式與目標 Type
Python 資料庫入門

百分比範例

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'),)]
Python 資料庫入門

一起來練習吧!

Python 資料庫入門

Preparing Video For Download...