SQL-запрос для получения количества повторяющихся записей на основе других факторов

StackOverflow https://stackoverflow.com/questions/1429216

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня есть таблица (участники), в которой есть несколько столбцов, которые все могут быть разными.Два столбца, которые представляют особый интерес в этом запросе, - это userId и programID Здесь у меня запрос из двух частей.

  1. Я хочу иметь возможность получить список всех идентификаторов пользователей, которые появляются более одного раза в этой таблице.Как мне это сделать?
  2. Я хочу иметь возможность получить количество всех идентификаторов программы, где один и тот же идентификатор пользователя отображается в нескольких идентификаторах программы.(Тоестьколичество программ, в которых один и тот же идентификатор пользователя отображается в 2 программах, количество программ, в которых один и тот же идентификатор пользователя отображается в 3 программах и т.д.) Например:

     programID: prog1
        userID: uid1
        userID: uid3
        userID: uid12
     programID: prog2
        userID: uid3
        userID: uid5
        userID: uid14
        userID: uid27
     programID: prog3
        userID: uid3
        userID: uid7
        userID: uid14
        userID: uid30
     programID: prog4
        userID: uid1
    

    Ожидаемые результаты:Количество идентификаторов пользователя = 2;программы = 3 Количество идентификаторов пользователя = 3;программы = 3

Кто-нибудь, пожалуйста, может помочь мне с этим.

мой текущий код для вопроса 1 таков:

    SELECT 
    WPP.USERID, 
    WPI.EMAIL, 
    WPI.FIRSTNAME, 
    WPI.LASTNAME, 
    WPI.INSTITUTION 
    FROM WEBPROGRAMPARTICIPANTS WPP 
    INNER JOIN WEBPERSONALINFO WPI 
    ON WPP.USERID = WPI.USERID 
    INNER JOIN WEBPROGRAMS WP 
    ON WPP.PROGRAMCODE = WP.PROGRAMCODE 
    WHERE 
    WP.PROGRAMTYPE IN ('1','2','3','4','5','6', '9', '10') 
    GROUP BY 
    WPP.USERID, 
    WPI.EMAIL, 
    WPI.FIRSTNAME, 
    WPI.LASTNAME, 
    WPI.INSTITUTION 
    HAVING COUNT(WPP.USERID) > 1
    ORDER BY WPI.EMAIL
Это было полезно?

Решение 3

Это была проблема с моей стороны, с логическим шагом, который был пропущен.

Другие советы

1.

select userID , SUM(userID ) AS Count 
from Preparations 
group by userID where Count > 1

Ваш запрос для первой части выглядит хорошо. Вот ваш запрос для части 2:

SELECT DISTINCT p1.programID, COUNT(p1.userID) AS Multiple
FROM participants p1
JOIN participants p2 ON p2.userID = p1.userID
GROUP BY p1.userID, programID
ORDER BY Multiple, programID

В нем указывается номер идентификатора программы и количество других идентификаторов программ, в которых этот идентификатор указан для каждого идентификатора программы. Я думаю, что ваши ожидаемые результаты не соответствуют вашим данным. Должно быть:

userID count = 1; программы = 3; userID count = 2; программы = 4; userID count = 3; программы = 3;

Вы можете использовать вышеперечисленное в качестве подзапроса (производной таблицы), если хотите более точно настроить результаты, чтобы они больше походили на ожидаемые результаты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top