Получить количество пользователей на основе другого столбца

0

Я застрял в проблеме, описанной ниже:

id | user_id | admin
1  |    1    |   2
2  |    1    |   5
3  |    2    |   5
4  |    2    |   5
5  |    3    |   5
6  |    4    |   5

Мне нужно написать запрос, чтобы получить всех пользователей, которые связаны с идентификатором администратора, переданным в WHERE AND имеет несколько транзакций (может быть с другим администратором).

If user_id is 5 then result should come

user_id
1
2

Пытался

SELECT 
 user_id ,
 COUNT(*) count
FROM 
 table
 WHERE admin = 5
GROUP BY
 user_id
Having
count > 1

но этот вышеупомянутый запрос пропускает user_id, который имеет только одну транзакцию с admin = 5 и имеет другую строку с другим администратором.

Предложения?

Теги:

5 ответов

2
Лучший ответ

Совокупность на user_id и утверждать, что:

  • Представляет интерес администратор (например, 5)
  • Появляются две или более админы любого типа


SELECT user_id
FROM yourTable
GROUP BY user_id
HAVING SUM(CASE WHEN admin = 5 THEN 1 ELSE 0 END) > 0 AND
       COUNT(*) > 1;

демонстрация

  • 0
    @TimBiegeleisen Можете ли вы помочь с другим делом? Если нам нужно пропустить первую соответствующую запись, то как мы можем обновить ваш запрос? Демо user_id = 3 есть первая запись с admin = 5 и вторая с admin = 4 (если мы упорядочиваем по столбцу id ), поэтому мы не должны учитывать 3 в наборе результатов. Если мы не рассматриваем первую запись, а затем применяем нашу логику, каким должен быть обновленный запрос?
  • 1
    @SatishSaini Задайте новый вопрос. Это лишит законной силы всю работу, которую все сделали здесь.
0

В вашем фильтре запросов на admin=5 и с отдельным подзапросом для тех пользователей, у которых более 1 транзакции. У вас должен быть счетчик в подзапросе, потому что критерий admin=5 не применяется к счету.

SELECT DISTINCT user_id
FROM yourTable
WHERE admin_id=5
    AND user_id IN (SELECT user_id FROM yourTable GROUP BY user_id HAVING COUNT(*)>1)
0

SELECT user_id FROM test_table1 GROUP BY user_id HAVING SUM (CASE WHEN admin = & n THEN 1 ELSE 0 END)> 0 И COUNT (user_id)> 1;

0

Если я понимаю ваш вопрос, вы хотите спросить:

  1. Покажите мне всех пользователей, у которых более одного администратора
  2. Также позвольте мне определить, какой администратор конкретно находится под вопросом (в вашем примере 5)

Это даст вам список каждого пользователя (только идентификатор пользователя)

SELECT  DISTINCT table.user_id
FROM    table
        JOIN (
            SELECT  user_id 
                    ,COUNT(DISTINCT admin_id) num_admins
            FROM    table
            GROUP BY user_id
            HAVING  COUNT(DISTINCT admin_id) > 1
            ) multi_admin
            ON table.user_id = multi_admin.user_id
WHERE   admin = 5 -- if you want to look only at user_ids somehow associated with 
0

Попробуй это

SELECT user_id from 'tablename' WHERE admin IN( SELECT admin FROM 'tablename' GROUP BY admin HAVING count(*) > 1)
  • 0
    Прежде чем давать отрицательный рейтинг, как минимум, дайте нам правильный ответ. Я проверил этот запрос и он работает нормально. Это намного лучше, если вы также предоставите обратную связь, спасибо .....
  • 0
    Я так не думаю, в вашем запросе нет критерия admin = 5, поэтому не может быть в порядке. Я согласен с downvoter.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню