在笑一个试试 2024-04-13 20:57 采纳率: 0%
浏览 9

关于#mysql#的问题:SQL276 牛客的课程订单分析(六)我的代码:

SQL276 牛客的课程订单分析(六)
我的代码:

select o.id,o.is_group_buy,c.name as client_name
from order_info o left join client c on o.client_id=c.id
where (
select count(o.id)
from order_info
where o.product_name in ('C++','Python','Java') and o.date>'2025-10-15' and o.status="completed" and o.user_id=user_id
)>=2
order by o.id asc

4/5组通过,无法理解最后一组?

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-13 20:57
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试编写一个 SQL 查询,目的是找出那些在 2025 年 10 月 15 日之后完成了至少两门(C++、Python 或 Java)课程购买的用户,并按订单 ID 升序排列。根据你提供的信息,有四组测试用例已经通过了,但最后一组没有。为了帮你理解可能存在的问题,我们需要查看最后一组测试用例的具体数据,以及它期望的结果。

    不过,从当前的查询来看,可能存在一些潜在问题。首先,user_id 没有在查询的 FROM 子句中指定来源,这可能会导致语法错误。其次,你需要确保 o.user_id 和外部查询中的 user_id 是同一个值。这里是一个修正后的版本,将 user_id 添加到 FROM 子句中并明确关联:

    SELECT o.id, o.is_group_buy, c.name AS client_name
    FROM order_info o 
    JOIN client c ON o.client_id = c.id
    JOIN (SELECT user_id
          FROM order_info
          WHERE product_name IN ('C++', 'Python', 'Java')
            AND date > '2025-10-15'
            AND status = 'completed'
          GROUP BY user_id
          HAVING COUNT(DISTINCT product_name) >= 2) subquery
    ON o.user_id = subquery.user_id
    ORDER BY o.id ASC;
    

    这个修改版的查询做了以下改进:

    1. user_id 添加到了 FROM 子句中的子查询中。
    2. 使用了 JOIN 来连接主查询与子查询,这样可以确保 o.user_id 和子查询中的 user_id 是匹配的。
    3. 在子查询的 HAVING 子句中使用了 COUNT(DISTINCT product_name) 而不是 COUNT(o.id),这样我们只计算不同的课程数量,而不是所有订单的数量。因为题目要求的是用户完成至少两门不同的课程。

    如果你能提供最后一组测试用例的数据和预期结果,我可以更具体地帮你分析问题所在。同时,检查一下数据库表结构和数据是否正确也是非常重要的步骤。如果有任何错误或遗漏,请随时告诉我,我会继续协助你解决这个问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月13日

悬赏问题

  • ¥15 w10部分软件不能联网
  • ¥15 关于安装hbase的问题(操作系统-windows)
  • ¥15 cadence617版本,如何做一个参数可调的反相器
  • ¥15 novnc连接pve虚拟机报错安全协议不支持262
  • ¥15 设备精度0.03给多少公差能达到CPK1.33
  • ¥15 qt+ffmpeg报错non-existing PPS 0 referenced
  • ¥15 FOC simulink
  • ¥50 MacOS 使用虚拟机安装k8s
  • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
  • ¥25 oracle中的正则匹配