我有这个产品评论样本数据集。我正在努力让用户对某些产品给予积极评价。评级为 1-5,5 为最好,1 为最差。
我尝试了以下查询:
SELECT user, product, rating FROM reviews WHERE user != 1 (product = 173 AND rating > 3) AND (product = 50 AND rating > 3);
SELECT user FROM reviews WHERE user != 1 GROUP BY user HAVING (product = 173 AND rating > 3) AND (product = 50 AND rating > 3);
SELECT user, product, rating FROM reviews WHERE user != 1 AND (product, rating) IN ((173, 4), (50, 4))
它们都不起作用。我正在寻找给产品评分为 173、4 或 5 并给产品评分为 50、4 或 5 的用户。很容易获得其中一个组合匹配的结果,但我需要匹配产品、评分组合的所有条件。
我准备了一个小提琴:db-fiddle.com
鉴于您使用的是 MySQL,我们可以尝试以下使用元组语法的聚合方法:
SELECT user
FROM reviews
WHERE (product, rating) IN ((173, 4), (173, 5), (50, 4), (50, 5))
GROUP BY user
HAVING COUNT(DISTINCT product) = 2;