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

SQL查询:获取姓名重复且仅订购过5分水果的客户对

实现思路

你的现有查询存在逻辑漏洞:仅通过WHERE过滤评分5的水果行,无法排除「用户同时买过5分和非5分水果」的情况,不能真正筛选出仅订购过5分水果的用户。正确实现分两步:

  1. 先过滤出所有仅订购过5分水果的合格客户
  2. 对合格客户做自关联,匹配同姓名的重复客户,同时通过id大小限制避免重复配对

完整查询语句

WITH qualified_customers AS (
    -- 第一步:筛选仅订购过taste_rating=5的水果的客户
    SELECT 
        c.id customer_id,
        c.first_name,
        c.last_name
    FROM Customers c
    INNER JOIN Orders o ON c.id = o.customer_id
    INNER JOIN Order_Item oi ON o.id = oi.order_id
    INNER JOIN Fruits f ON oi.fruit_id = f.id
    GROUP BY c.id, c.first_name, c.last_name
    -- 核心判断:该客户所有订购的水果没有出现过非5分的评分
    HAVING SUM(CASE WHEN f.taste_rating != 5 THEN 1 ELSE 0 END) = 0
)
-- 第二步:匹配同姓名的重复客户
SELECT 
    q1.customer_id u1_id,
    q2.customer_id u2_id,
    q1.first_name,
    q1.last_name
FROM qualified_customers q1
INNER JOIN qualified_customers q2 
    ON q1.first_name = q2.first_name
    AND q1.last_name = q2.last_name
    AND q1.customer_id < q2.customer_id

逻辑说明

  • 子查询qualified_customers里通过分组聚合判断每个客户的所有订单水果评分是否全为5,彻底排除不符合要求的客户
  • 自关联时加q1.customer_id < q2.customer_id的条件,是为了避免同一对客户重复出现(比如不会同时输出(1,4)和(4,1)两条相同配对的记录)
  • 最终输出结果和你给出的示例完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:04