FROM views v JOIN memes m JOIN comments c
Вы конечно, не указали, в какой СУБД пишете, но странно видеть JOIN без ON или USING.
Если это эквивалент синтаксиса с USING, то вы увидите статистику, если по пользователю есть И просмотры, И мемы, И комментарии. Если в одной из таблиц не будет записей, то пользователь вывалится из статистики.
Если это эквивалент:
FROM views v, memes m, comments c
То такое декартово произведение таблиц с использованием distinct будет не производительно.
Рационально вам написать такое:
SELECT (select COUNT(v.id) from views v where v.user_id = u.user_id ) AS просмотры,
(select COUNT(DISTINCT v.meme_id) from views v where v.user_id = u.user_id) AS [уникальные просмотры],
(select COUNT(m.id) from memes m where m.user_id = u.user_id) AS [выложено мемов],
(select COUNT(c.id) from comments c where c.user_id = u.user_id) AS [написано комментариев]
FROM users u -- лучше связаться с таблицей users
WHERE u.user_id = 1
Тогда каждый подзапрос будет работать по своей агрегации (да, если по какой-то таблице не будет записей, то вы увидите по ней ноль, а не пустую строчку по всем параметрам), дистинктовать вам нужно только по параметру уникальные просмотры - но его использование не связано с размножением записей при объединении таблиц, так что он посчитает его достаточно быстро.
PS: Если вы не забыли создать индексы для v.user_id, v.meme_id, m.user_id, c.user_id, то должно все летать на космической скорости.