avg

Function avg 

Source
pub fn avg<ST: Foldable, expr>(
    expr: expr,
) -> avg<ST, <expr as AsExpression<ST>>::Expression>
where expr: AsExpression<ST>,
Expand description

Represents a SQL AVG function. This function can only take types which are Foldable.

§Window Function Usage

This function can be used as window function. See WindowExpressionMethods for details

§Aggregate Function Expression

This function can be used as aggregate expression. See AggregateExpressionMethods for details.

§Examples

§Normal function usage

diesel::insert_into(numbers)
    .values(&vec![number.eq(1), number.eq(2)])
    .execute(conn)?;
let average = numbers.select(avg(number)).get_result(conn)?;
let expected = "1.5".parse::<BigDecimal>().unwrap();
assert_eq!(Some(expected), average);

§Window function

fn run_test() -> QueryResult<()> {
let res = animals.select((name, avg(legs).partition_by(id))).load::<(Option<String>, Option<BigDecimal>)>(connection)?;

assert_eq!(vec![
        (Some("Jack".into()), "4".parse::<BigDecimal>().ok()),
        (None, "8".parse::<BigDecimal>().ok()),
    ], res);

§Aggregate function expression

diesel::insert_into(numbers)
    .values(&vec![number.eq(1), number.eq(2), number.eq(3)])
    .execute(conn)?;

let average = numbers.select(avg(number).aggregate_filter(number.lt(3))).get_result(conn)?;
let expected = "1.5".parse::<BigDecimal>().unwrap();
assert_eq!(Some(expected), average);