Я был бы очень признателен, если бы кто-нибудь мог проверить мой SQL-запрос.
Для следующего набора данных:
MD5 UserPK CategoryPK
ADCDE 1 7
ADCDE 1 4
ADCDE 1 7
dffrf 1 7
dffrf 2 7
dffrf 2 6
dffrf 1 1
Я хотел бы выбрать MD5 и CategoryPK, где существуют две или более строк с одинаковыми значениями MD5, идентичными CatgegoryPK и двумя или более РАЗЛИЧНЫМИ значениями UserPK.
Другими словами, я хотел бы знать MD5 и categoryPK всех записей, в которых два или более разных пользователя (UserPK) присвоили одну и ту же категорию (UserPK) одному и тому же файлу (Md5). Меня не интересуют записи, которым один и тот же пользователь присвоил категорию несколько раз (если другой пользователь также не присвоил ту же категорию этому файлу).
Таким образом, исходя из приведенных выше данных, я хотел бы, чтобы мне вернули только:
md5 CategoryPK
dffrf 7
Я написал следующий запрос:
SELECT md5,
count(md5),
count(distinct categorypk) as cntcat,
count(distinct userpk) as cntpk
FROM Hash
group by md5 having count(md5) > 1
and cntpk > 1
and cntcat = 1;
Кажется, он работает, но прежде чем я начну использовать его в гневе, я был бы признателен за второе мнение на случай, если я что-то пропустил или есть лучший способ сделать это.
Спасибо