我们正在开发一个本地商店推荐系统,在我们的一个sql查询中,我们遇到了一个问题,我们希望获取同一个集群中所有用户都对该公司进行了评级的公司,但是如果同一个组中的任何一个用户没有对该公司进行评级,我们就不想获取它
SELECT ml_user_clusters.primaryUser,ml_user_clusters.clusterId,ml_ratings.companyId,ml_ratings.rating,ml_user_labels.groupId FROM ml_user_clusters
LEFT JOIN ml_ratings ON ml_ratings.userId = ml_user_clusters.primaryUser
LEFT JOIN ml_company_user_labels ON ml_company_user_labels.companyId = ml_ratings.companyId
LEFT JOIN ml_user_labels ON ml_user_labels.groupId = ml_company_user_labels.labelId
WHERE ml_user_clusters.clusterId = 0
我们已经开始添加如下所示的查询,但无法使用适当的and子句完成
我们的数据如下:因此在结果中,我们希望只有groupid=6的公司,因为同一集群(clusterid=0)中的所有用户都对groupid=6的公司进行了评级
primaryUser clusterId companyId rating groupId
497 0 135 5 NULL
498 0 135 10 NULL
79 0 135 12 NULL
501 0 135 10 NULL
79 0 85 14 2
79 0 8 4 5
79 0 98 11 5
79 0 3 5 5
497 0 6 7 6
500 0 6 7 6
499 0 29 7 6
497 0 29 7 6
499 0 77 7 6
500 0 29 7 6
498 0 6 7 6
500 0 77 11 6
500 0 130 3 6
498 0 130 3 6
501 0 77 19 6
499 0 6 7 6
79 0 30 1 7
500 0 30 7 7
79 0 48 7 9
79 0 39 1 13
79 0 48 7 13
499 0 6 7 15
497 0 6 7 15
79 0 8 4 15
500 0 6 7 15
79 0 98 11 15
498 0 6 7 15
79 0 3 5 15
79 0 81 7 15
79 0 3 5 17
79 0 82 7 17
79 0 103 7 17
79 0 118 3 17
79 0 63 3 17
501 0 118 7 17
79 0 82 7 19
79 0 118 3 19
79 0 63 3 19
501 0 118 7 19
79 0 39 1 21
79 0 85 14 23
预期输出必须是:(因为cluster=0中的所有唯一用户都对groupid=6的公司进行了评级)
primaryUser clusterId companyId rating groupId
497 0 6 7 6
500 0 6 7 6
499 0 29 7 6
497 0 29 7 6
499 0 77 7 6
500 0 29 7 6
498 0 6 7 6
500 0 77 11 6
500 0 130 3 6
498 0 130 3 6
501 0 77 19 6
499 0 6 7 6
你知道我们怎样才能解决那个问题吗?
1条答案
按热度按时间cygmwpex1#
像这样的东西应该可以工作,你应该建立一个更好的测试小提琴。
说明:按组id对不同用户进行计数,并与不同用户的总数进行比较。如果两者匹配,则表示相应组id中的所有用户都进行了投票。