استعلام SQL للحصول على السجلات المكررة التهم بناء على عوامل أخرى
-
07-07-2019 - |
سؤال
لدي جدول (المشاركين) والتي لديها العديد من الأعمدة التي يمكن أن تكون متميزة.اثنين من الأعمدة التي هي ذات أهمية خاصة في هذا الاستعلام هي رمز المستخدم و programID لدي الجزء الثاني inquery هنا.
- أريد أن تكون قادرة على الحصول على قائمة من جميع userIDs التي تظهر أكثر من مرة في هذا الجدول.كيف يمكنني فعل ذلك ؟
أريد أن تكون قادرة على الحصول على الاعتماد من جميع programID حيث نفس معرف المستخدم يظهر في عدة programIDs.(I. E.عدد البرامج فيها نفس معرف المستخدم يظهر في البرامج 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
هذه مسألة على جانب المنطق خطوة لم يقم بها.
نصائح أخرى
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
وهو يسرد programID وعدد الأخرى programIDs أن نفس معرف المستخدم يظهر في كل programID.أعتقد أن النتائج المتوقعة من الخطأ الخاصة بك بيانات العينة.ينبغي أن يكون:
userID count = 1;البرامج = 3;userID count = 2;البرامج = 4;userID count = 3;البرامج = 3;
يمكنك استخدام أعلاه فرعي (مشتقة الجدول) إذا كنت ترغب في تهذيب النتائج تبدو أكثر مثل النتائج المتوقعة.