> get the most frequently appearing `user_code` where the month is specified

Since `user_code` is the primary key, that question would be nonsense. There can never be more than one. I assume you meant `invite_code`?

Just add a `WHERE` clause. And since the column can be NULL, also consider excluding NULL values:

    SELECT invite_code, COUNT(*) AS counted
    FROM   invite_table
    WHERE  month = 'May'  -- or whatever is stored in your varchar(3) column
    AND    invite_code IS NOT NULL -- exclude NULL
    GROUP  BY invite_code
    ORDER  BY counted DESC, invite_code  -- to break ties in deterministic fashion
    LIMIT  10;

### Month, date, timestamp?

A month column as `varchar(3)` doesn't seem very useful if there can be data for more than a single year. I would use data type `date` for it. You can format that with [`to_char()`][1] any way you like for presentation. Like:

    SELECT to_char(date '2017-12-01', 'Mon');  -- 'Dec'

The column could look like this (also addressing your comment):

    ...
    , inserted_at date DEFAULT CURRENT_DATE
    ...

The default value is entered when the column is omitted in an `INSERT` statement.

Or, if really only the month is relevant:

    ... DEFAULT date_trunc('month', now())::date

Or store the complete `timestamptz` (8 bytes, that's what I would probably do):

    ...
    , inserted_at timestamptz DEFAULT now()
    ...

Read the manual [here][2] and [here][3].

And be aware that *date* and *timestamp* depend on your current time zone setting. Details:

- [Ignoring timezones altogether in Rails and PostgreSQL][4]


  [1]: https://www.postgresql.org/docs/current/static/functions-formatting.html
  [2]: https://www.postgresql.org/docs/current/static/ddl.html
  [3]: https://www.postgresql.org/docs/current/static/functions-datetime.html
  [4]: https://stackoverflow.com/questions/9571392/ignoring-timezones-altogether-in-rails-and-postgresql/9576170#9576170