Determine record count grouped as year-month for each user including 0 counts
I don't have a MySQL instance handy to test and confirm that this works for you, but this should work.  It assumes that you have at least one entry for every month in the table.  

SELECT DateTable.MonthDay
    , RecordCount.Records
    , RecordCount.created_by
FROM (
    SELECT DISTINCT DATE_ADD(LAST_DAY(DATE_SUB(created_at, interval 30 day), interval 1 day) AS MonthDay
    FROM article
    ) AS DateTable
    LEFT OUTER JOIN (SELECT DATE_ADD(LAST_DAY(DATE_SUB(created_at, interval 30 day), interval 1 day) AS MonthDay
                        , created_by
                        , COUNT(id) AS Records
                    FROM article
                    ) AS RecordCount ON RecordCount.MonthDay = DateTable.MonthDay
WHERE DateTable.MonthDay &gt;= '4/1/2017' AND DateTable.MonthDay &lt;= '10/1/2017'