SQL: помогите выполнить два подсчета в одном запросе

#sql

#sql

Вопрос:

У меня есть таблица, которая выглядит следующим образом:

 | user_id | client_application_id | invalidated_at
|       1 | 55555 | |
|       1 | 123   | |
  

Я хочу иметь возможность делать одну вещь:

  1. Уметь подсчитывать, сколько идентификаторов пользователей имеют более 250 идентификаторов client_application_id в своей учетной записи, и упорядочивать их так, чтобы они начинались с 250 и увеличивались.

Мой текущий (неправильный) запрос выглядит следующим образом:

 select  user_id, count(user_id) as cnt from tokens where invalidated_at is null group by user_id having count(user_id) > 250 order by cnt ;
  

Результат выглядит следующим образом:

   user_id   | cnt 
------------ -----
    1 | 251
    5 | 251
  

Используя этот пример, я хотел бы, чтобы запрос подсчитал двух пользователей, у которых есть 251, чтобы это выглядело следующим образом:

 Count_Of_Users  | Application_Count
2 | 251
  

Комментарии:

1. в чем проблема.. у вас есть идентификатор пользователя по первому запросу .. лучше объясните ожидаемый результат для запроса secondo..

2. Отредактируйте свой вопрос и предоставьте желаемый результат.

3. Обновил его сейчас, надеюсь, это более понятно

Ответ №1:

Вы можете использовать что-то похожее на ваш запрос в качестве подзапроса и получить нужный вам результат:

     select count(user_id) as count_of_users, cnt as application_count from
    (
       select  user_id, count(client_application_id) as cnt 
       from tokens 
       where invalidated_at is null 
       group by user_id having count(client_application_id) > 250 
    ) t
    group by cnt
    order by cnt 
  

Ответ №2:

Неясно, какой ваш ожидаемый результат для запроса secondo может быть чем-то вроде этого

   select users.*, t.user_id, t.cnt 
  from users 
  inner join ( 

      select  user_id, count(user_id) as cnt 
      from tokens 
      where invalidated_at is null 
      group by user_id 
      having count(user_id) > 250 
  ) t on users.id = t.user_id 
  order by t.user_id