匹配两列的多个组合

问题描述 投票:0回答:1

我有这个产品评论样本数据集。我正在努力让用户对某些产品给予积极评价。评级为 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

mariadb
1个回答
0
投票

鉴于您使用的是 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;
© www.soinside.com 2019 - 2024. All rights reserved.