Обчислення значень у запиті

Вступ до баз даних у 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...