SQL-запрос для получения дубликатов записей на основе других факторов - PullRequest
0 голосов
/ 15 сентября 2009

У меня есть таблица (участники), которая имеет несколько столбцов, которые могут быть различны. Два столбца, которые представляют особый интерес в этом запросе, это 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
    

    Ожидаемые результаты: userID count = 2; программы = 3 userID count = 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 ]

2 голосов
/ 15 сентября 2009

1.

select userID , SUM(userID ) AS Count 
from Preparations 
group by userID where Count > 1
0 голосов
/ 28 октября 2009

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

0 голосов
/ 16 сентября 2009

Ваш запрос для первой части выглядит хорошо. Вот ваш запрос для части 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;

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

...