개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.01 22:09

SQLite3::createAggregate 관련 질문내용

목록
  • Lambda마법사 4일 전 2025.06.01 22:09
  • 13
    1

SQLite3::createAggregate 메서드를 사용하여 커스텀 애그리게이트 함수를 만들려고 합니다.
하지만 애그리게이트 함수를 정의할 때 사용해야 하는 옵션에 대해 잘 모르겠습니다.
createAggregate 메서드의 옵션 중에서 step, finalize, aggregate, serialize, deserialize 옵션에 대해 설명해주시면 감사하겠습니다.
특히 step 함수에서 사용해야 하는 인수에 대해 궁금합니다.

    댓글목록

    profile_image
    나우호스팅  4일 전



    SQLite3::createAggregate 메서드는 커스텀 애그리게이트 함수를 만들기 위해 사용됩니다. 이 메서드의 옵션은 다음과 같습니다.

    - step: 이 함수는 애그리게이트 함수의 연산을 수행합니다. 인수로는 현재 결과값, 새로운 입력값, 그리고 이전 결과값이 전달됩니다. 예를 들어, 평균을 구하는 경우, 이전 결과값에 새로운 입력값을 더하고, 이전 결과값의 개수를 1 증가시키는 방식으로 연산을 수행할 수 있습니다.

    - finalize: 이 함수는 애그리게이트 함수의 최종 결과를 계산합니다. 인수로는 현재 결과값이 전달됩니다. 예를 들어, 평균을 구하는 경우, 이전 결과값의 개수로 나누어 평균을 계산하는 방식으로 연산을 수행할 수 있습니다.

    - aggregate: 이 함수는 애그리게이트 함수의 초기값을 설정합니다. 인수로는 애그리게이트 함수의 초기값이 전달됩니다. 예를 들어, 평균을 구하는 경우, 0을 초기값으로 설정하는 방식으로 연산을 수행할 수 있습니다.

    - serialize: 이 함수는 애그리게이트 함수의 결과를 문자열로 변환합니다. 인수로는 애그리게이트 함수의 결과값이 전달됩니다. 예를 들어, 평균을 구하는 경우, 결과값을 문자열로 변환하는 방식으로 연산을 수행할 수 있습니다.

    - deserialize: 이 함수는 문자열로 변환된 애그리게이트 함수의 결과를 원래 형태로 변환합니다. 인수로는 문자열로 변환된 애그리게이트 함수의 결과값이 전달됩니다. 예를 들어, 평균을 구하는 경우, 문자열로 변환된 결과값을 원래 형태로 변환하는 방식으로 연산을 수행할 수 있습니다.

    예를 들어, 평균을 구하는 커스텀 애그리게이트 함수를 만들면 다음과 같습니다.

    #hostingforum.kr
    ruby
    
    db = SQLite3::Database.new('example.db')
    
    db.execute('CREATE TABLE example (value INTEGER)')
    
    
    
    db.create_aggregate('mean', 1) do |result, value|
    
      result['value'] += value
    
      result['count'] += 1
    
    end
    
    
    
    db.create_aggregate('mean_finalize', 0) do |result|
    
      result['value'] /= result['count']
    
    end
    
    
    
    db.execute('INSERT INTO example (value) VALUES (1)')
    
    db.execute('INSERT INTO example (value) VALUES (2)')
    
    db.execute('INSERT INTO example (value) VALUES (3)')
    
    
    
    result = db.get_first_value('SELECT mean(value) FROM example')
    
    puts result  # => 2.0
    
    
    
    result = db.get_first_value('SELECT mean_finalize(value) FROM example')
    
    puts result  # => 2.0
    
    

    2025-06-01 22:10

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 25,613건 / 56 페이지

검색

게시물 검색