簡體   English   中英

MySQL - 對條件相同的多行進行分組

[英]MySQL - Grouping multiple rows where criteria is the same

我有一個電影評級表,其中包含數百萬行包含userid,movieid和評級的行。

| userId | movieId | rating |
------------------------------
| 1      | 213     | 5      |
| 1      | 245     | 4      |
| 2      | 213     | 4      |
| 2      | 245     | 4      |
| 3      | 657     | 5      |
| 3      | 245     | 5      |

我試圖想出一種將userId分組在一起的方法,其中包含匹配的movieId集合。 理想情況下,我希望查詢只查找匹配項,如果它們共有至少5個movieId,並且如果評級高於4,但我已經為此示例簡化了它。

在上面的實例中,userId 1和2將是唯一匹配的用戶,因為它們都包含相同的movieIds。 我需要一個基本上可以復制它的聲明。 在此先感謝您的幫助。

您可以在匹配的電影上執行自我加入,過濾掉具有不感興趣的評級的記錄,按用戶對進行分組,然后僅為那些至少具有必要匹配記錄數的組過濾結果組:

SELECT   a.userId, b.userId
FROM     myTable a JOIN myTable b USING (movieId)
WHERE    a.userId < b.userId
     AND a.rating > 4
     AND b.rating > 4
GROUP BY a.userId, b.userId
HAVING   COUNT(*) >= 5
select movieId, rating 
from tablename
group by movieId 
having count(userId) > 1 and rating > 4;

這給了我movieId 245和等級5,根據你提供的示例數據,它應該是正確的,有超過1個userId和大於4的等級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM