我的数据库中有这个表:
ID userID MovieID Rank
1 1 1 9
2 1 2 9
3 1 3 9
4 2 1 9
5 2 2 10
我想查询它以获得他们评价相同的2个用户之间的互动电影。
例如,在这种情况下,用户1和用户2都将movieID = 1评为“9”。
所以我想在结果中只获得电影1。
- UPDATE -
所以我想出了这个(感谢@ RJ1990)
SELECT MovieID
FROM LoverMovie
WHERE (LoverID = 1) OR
(LoverID = 2)
GROUP BY MovieID
HAVING (COUNT(*) > 1) AND (ABS(MAX(Rank) - MIN(Rank)) < 3)
这种查询是用EF(DbContext)编写的吗?
答案 0 :(得分:1)
目前尚不清楚您尝试了什么以及您面临的问题。但是这个查询会返回有多个投票的电影:
from m in db.Movies // assume you have Movies table
join mr in db.MovieRates
on m.ID equals mr.MovieID into g // and MovieRates table
where g.Count() > 1
select m
或者如果您定义了导航属性:
db.Movies.Where(m => m.Rates.Count() > 1)
如果您还需要验证费率来自不同的用户,则代替.Count() > 1
使用.Select(x => x.UserID).Distinct().Count() > 1
- 此条件会从费率中选择不同的用户ID。
答案 1 :(得分:1)
方法:
从以下查询中,您将获得类似评分不止一个的特定电影的 MovieID ,评分和 Rate_Count
select MovieID,Rank,Count(*) Rate_Count
from your_table
group by MovieID,Rank
having Count(*) > 1