RimMirK
@RimMirK
Вроде человек. Вроде учусь. Вроде пайтону

Как вывести id?

Есть вот такой запрос. Выводит уникальное количевство просмотров для каждого пользователя. Надо к каждой выводимой строке приделать порядковый номер, как это сделать?
SELECT (
           SELECT nickname
             FROM users
            WHERE id = user_id
       )/* AS пользователь */,
       COUNT(DISTINCT meme_id)/* AS 'уникальных просмотров (разных мемов)' */
  FROM views
 GROUP BY user_id;
  • Вопрос задан
  • 248 просмотров
Решения вопроса 2
@alexalexes
1. Вычисляете агрегированную выборку - подзапрос A.
2. Сортируете выборку в том порядке, как собираетесь нумеровать - подзарос B.
3. Нумеруете строки доступной функцией в конкретной СУБД (в Oracle это rownum, в остальных средах есть row_number, в MySQL 5 версии нужно делать костыль из пользовательской переменной @ и if-a).
select rownum, B.*
from (select A.*
            from (SELECT v.user_id,
                  u.nickname,
                 COUNT(DISTINCT v.meme_id) as meme_count
                FROM views as v
                   join  users u on u.id = v.user_id
               GROUP BY v.user_id, u.nickname) A
        order by A.meme_count desc) B
Ответ написан
@RusCosinus
Если я нигде не ошибся, то вот проще вариант (для MS SQL, но, подозреваю, что с небольшими доработками подойдет и для Oracle)
select ROW_NUMBER() over (order by u.nickname)
		,u.nickname
		,count(distinct v.meme_id)
from users u
inner join views v on v.user_id = u.id
group by u.nickname


Вот эта конструкция сортирует как надо и в указанном порядке сортировки нумерует
ROW_NUMBER() over (order by u.nickname)
Не до конца уверен вот в этом "count(distinct meme_id)", не очень уверен в структуре таблиц, но, на первый взгляд, все верно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы