Best way in MySQL or Rails to get AVG per day within a specific date range

前端 未结 4 575
谎友^
谎友^ 2021-02-06 14:41

I\'m trying to make a graph in Rails, for example the avg sales amount per day for each day in a given date range

Say I have a products_sold model which has a \"sales_pr

4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-02-06 15:23

    Does MySQL have set-returning functions? I.e. functions that return different values on each row of a query? As an example from PostgreSQL, you can do:

    select 'foo', generate_series(3, 5);
    

    This will produce a result set consisting of 2 columns and 3 rows, where the left column contains 'foo' on each row and the right column contains 3, 4 and 5.

    So, assuming you have an equivalent of generate_series() in MySQL, and subqueries: What you need is a LEFT OUTER JOIN from this function to the query that you already have. That will ensure you see each date appear in the output:

    SELECT
        avg(sales_price) as avg,
        DATE_FORMAT(the_date, '%m-%d-%Y') as date
    FROM (select cast('2008-JAN-01' as date) + generate_series(0, 364) as the_date) date_range
    LEFT OUTER JOIN products_sold on (the_date = created_at)
    WHERE merchant_id = 1
    GROUP BY date;
    

    You may need to fiddle with this a bit to get the syntax right for MySQL.

提交回复
热议问题