クエリで値を計算する

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 句

  • データ型を変換
  • 便利な用途
    • 割り算用に整数→浮動小数へ
    • 文字列→日付・時刻へ
  • 列または式と、目標の型を指定
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...