You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL查询同时对两款指定产品给出高分评价的用户?

解决同时筛选多产品高分用户的SQL问题

你之前的查询存在的问题

  • 第一个查询语法错误(漏写AND),且逻辑矛盾:同一行记录不可能同时属于产品173和50,因此WHERE子句的条件永远无法匹配到结果。
  • 第二个查询的HAVING子句用法错误:GROUP BY user之后,直接使用product = 173无效——每个用户可能对应多条不同产品的记录,必须通过聚合函数判断该用户是否存在符合条件的评价。
  • 第三个查询仅能筛选出对某一个产品打4分的记录,无法确保用户同时满足两个产品的高分要求。

正确的SQL解法

以下三种方法都能实现你的需求:找出同时对产品173、50给出4或5分,且排除user=1的用户。

方法一:GROUP BY + HAVING 统计符合条件的产品数量

SELECT user
FROM reviews
WHERE user != 1
  AND ((product = 173 AND rating >= 4) OR (product = 50 AND rating >= 4))
GROUP BY user
HAVING COUNT(DISTINCT product) = 2;

先筛选出目标产品的高分记录,按用户分组后,统计不同产品的数量为2,即可确认该用户同时满足两个产品的评分要求。

方法二:自连接匹配双产品记录

SELECT DISTINCT r1.user
FROM reviews r1
JOIN reviews r2 ON r1.user = r2.user
WHERE r1.user != 1
  AND r1.product = 173 AND r1.rating >= 4
  AND r2.product = 50 AND r2.rating >= 4;

通过自连接,分别匹配用户对产品173和50的高分记录,最终得到同时存在两类记录的用户,用DISTINCT避免重复结果。

方法三:EXISTS子查询验证双条件

SELECT DISTINCT user
FROM reviews r
WHERE user != 1
  AND EXISTS (
    SELECT 1 FROM reviews 
    WHERE user = r.user AND product = 173 AND rating >= 4
  )
  AND EXISTS (
    SELECT 1 FROM reviews 
    WHERE user = r.user AND product = 50 AND rating >= 4
  );

主查询遍历用户,通过两个EXISTS子查询分别验证该用户是否对两个产品都有4/5分的评价,确保双条件同时成立。

内容的提问来源于stack exchange,提问作者Whip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:58:17