Remember SQL statement ALWAYS return a table of some sort.
Apparently, when you use MAX, the query returns a table with a row that contains the value for MAX(downloads) in downloads column. I think if the fake_app table contains two apps with the same largest values for the downloads column will return the table with two rows.
Conversely, when you use AVG what it gets returned should be a table with one row having one name, and one averaged value. But the name should come from name column. I think in this case (and usually) you get names from the last row in the fake_app table in each category. In fact, you get the same app names if you run:
SELECT name, category, downloads FROM fake_apps GROUP BY category;