Understand PostgreSQL's statistics about rows and times
The "rows" field only reports rows returned by the query in question.  The pg_stat_database fields also count rows that had to be fetched from system catalogs in order to plan and execute your queries.  pg_stat_statements doesn't track these, not even with pg_stat_statements.track=all.  Since the catalog data is generally cached within a session, this can give you massive expansion in the number in pg_stat_database relative to pg_stat_statements if you only execute one small query in each session and then disconnect.  These catalog reads can also explain the difference in read times.

There is more to the story than that, like whether they count input rows or output rows for aggregations and joins.  Frankly I find tup_returned and tup_fetched to be useless. 

What problem are you trying to solve?