Mysql Выберите строки с одинаковыми значениями в одном столбце и разными в другом

Я был бы очень признателен, если бы кто-нибудь мог проверить мой 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;

Кажется, он работает, но прежде чем я начну использовать его в гневе, я был бы признателен за второе мнение на случай, если я что-то пропустил или есть лучший способ сделать это.

Спасибо

7
задан user1395659 18 May 2012 в 12:31
поделиться