Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

ActiveMedian

Median and percentile for Active Record, Mongoid, arrays, and hashes

Supports:

  • PostgreSQL 9.4+
  • MariaDB 10.3.3+
  • MySQL and SQL (with extensions)
  • SQL Server 2012+
  • MongoDB 2.1+

🔥 Uses native functions for blazing performance

Build Status

Getting Started

Add this line to your application’s Gemfile:

gem 'active_median'

For MySQL and SQLite, also follow these instructions.

Models

Median

Item.median(:price)

Percentile

Request.percentile(:response_time, 0.95)

Works with grouping, too

Order.group(:store_id).median(:total)

User Input

If passing user input as the column, be sure to sanitize it first like you must with other aggregate methods like sum.

column = params[:column]

# check against permitted columns
raise "Unpermitted column" unless ["column_a", "column_b"].include?(column)

User.median(column)

Arrays and Hashes

Median

[1, 2, 3].median

Percentile

[1, 2, 3].percentile(0.95)

You can also pass a block

{a: 1, b: 2, c: 3}.median { |k, v| v }

Additional Instructions

MySQL

MySQL requires the PERCENTILE_CONT function from udf_infusion. To install it, do:

git clone https://github.com/infusion/udf_infusion.git
cd udf_infusion
./configure --enable-functions="percentile_cont"
make
sudo make install
mysql <options> < load.sql

SQLite

SQLite requires a community extension. Download extension-functions.c and follow the instructions for compiling loadable extensions for your platform. On Mac, use:

gcc -g -fPIC -dynamiclib extension-functions.c -o extension-functions.dylib

To load it in Rails, create an initializer with:

db = ActiveRecord::Base.connection.raw_connection
db.enable_load_extension(1)
db.load_extension("extension-functions.dylib")
db.enable_load_extension(0)

Upgrading

0.2.0

A user-defined function is no longer needed for Postgres. Create a migration with ActiveMedian.drop_function to remove it.

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development and testing:

git clone https://github.com/ankane/active_median.git
cd active_median
createdb active_median_test
bundle install
bundle exec rake test

About

Median and percentile for Active Record, Mongoid, arrays, and hashes

Resources

License

Packages

No packages published

Languages

You can’t perform that action at this time.