데이터 세기, 합계, 그룹화

Python으로 배우는 데이터베이스 입문

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

SQL 함수

  • 예: COUNT, SUM
  • from sqlalchemy import func
  • 파이썬에서 처리하는 것보다 효율적입니다
  • 데이터를 집계합니다
Python으로 배우는 데이터베이스 입문

합계 예시

from sqlalchemy import func

stmt = select([func.sum(census.columns.pop2008)])
results = connection.execute(stmt).scalar()
print(results)
302876613
Python으로 배우는 데이터베이스 입문

Group by

  • 동일한 값으로 행을 묶습니다
Python으로 배우는 데이터베이스 입문

Group by

stmt = select([census.columns.sex, 
  func.sum(census.columns.pop2008)])

stmt = stmt.group_by(census.columns.sex)
results = connection.execute(stmt).fetchall()
print(results)
[('F', 153959198), ('M', 148917415)]
Python으로 배우는 데이터베이스 입문

Group by

  • order_by()와 유사한 방식으로 여러 열을 그룹화합니다
  • 선택한 모든 열은 그룹화하거나 함수로 집계해야 합니다
Python으로 배우는 데이터베이스 입문

다중 기준으로 그룹화

stmt = select([census.columns.sex,
        census.columns.age,
        func.sum(census.columns.pop2008)
    ])

stmt = stmt.group_by(census.columns.sex, census.columns.age)
results = connection.execute(stmt).fetchall() print(results)
[('F', 0, 2105442), ('F', 1, 2087705), ('F', 2, 2037280),
('F', 3, 2012742), ('F', 4, 2014825), ('F', 5, 1991082),
('F', 6, 1977923), ('F', 7, 2005470), ('F', 8, 1925725), ...
Python으로 배우는 데이터베이스 입문

함수 결과 ResultSet 처리

  • SQLAlchemy는 ResultSet의 함수에 대해 자동으로 "열 이름"을 생성합니다
  • 열 이름은 count_1 같은 func_#인 경우가 많습니다
  • label() 메서드로 바꿉니다
Python으로 배우는 데이터베이스 입문

label() 사용하기

print(results[0].keys())
['sex', u'sum_1']
stmt = select([census.columns.sex,
        func.sum(census.columns.pop2008).label('pop2008_sum')
    ])

stmt = stmt.group_by(census.columns.sex)
results = connection.execute(stmt).fetchall() print(results[0].keys())
['sex', 'pop2008_sum']
Python으로 배우는 데이터베이스 입문

연습해 봅시다!

Python으로 배우는 데이터베이스 입문

Preparing Video For Download...