Výpočty hodnot v dotazu

Introduction to Databases in Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Matematické operátory

  • sčítání +
  • odčítání -
  • násobení *
  • dělení /
  • modulo %
  • Různé chování pro různé datové typy
Introduction to Databases in Python

Výpočet rozdílu

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)]
Introduction to Databases in Python

Příkaz case

  • Umožňuje různé zpracování dat podle podmínky
  • Přijímá seznam podmínek a sloupec, který vrátí při jejich splnění
  • Seznam podmínek končí klauzulí else pro případ, kdy záznam nesplní žádnou podmínku
Introduction to Databases in Python

Příklad s 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,)]
Introduction to Databases in Python

Příkaz cast

  • Převádí data na jiný typ
  • Užitečné například pro...
    • převod celých čísel na desetinná pro dělení
    • převod řetězců na datum a čas
  • Přijímá sloupec nebo výraz a cílový typ
Introduction to Databases in Python

Příklad s procentem

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'),)]
Introduction to Databases in Python

Pojďme si procvičit!

Introduction to Databases in Python

Preparing Video For Download...