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

SQL查询重复订单日期与客户ID行并显示产品ID时遇报错求助

问题解决:筛选客户同日下单的所有记录

报错原因

你写的SQL报错是因为SELECT子句中的productid既没有被包含在GROUP BY子句中,也没有被聚合函数(比如MAX()、MIN())包裹。当你按orderdate和customerid分组后,每个分组可能对应多条不同productid的记录,数据库无法确定要返回该分组下的哪一个productid,因此触发了标准SQL的约束错误。

正确实现方案

以下是三种可行的解决方法,适用于不同的SQL场景:

方法1:窗口函数(推荐,简洁高效)

用COUNT() OVER()窗口函数标记每个orderdate+customerid组合的记录数,再筛选出记录数大于1的行:

SELECT orderdate, customerid, productid
FROM (
    SELECT 
        orderdate, 
        customerid, 
        productid,
        COUNT(*) OVER(PARTITION BY orderdate, customerid) AS order_count
    FROM sales_orders_sheet
) AS sub_query
WHERE order_count > 1;

方法2:自连接

通过自连接匹配同一客户同一日期下的不同订单记录,再去重得到目标数据:

SELECT DISTINCT s1.orderdate, s1.customerid, s1.productid
FROM sales_orders_sheet s1
JOIN sales_orders_sheet s2 
    ON s1.orderdate = s2.orderdate 
    AND s1.customerid = s2.customerid 
    AND s1.productid != s2.productid;

方法3:子查询+IN条件

先通过分组找出存在重复的orderdate+customerid组合,再关联原表获取对应的productid:

SELECT orderdate, customerid, productid
FROM sales_orders_sheet
WHERE (orderdate, customerid) IN (
    SELECT orderdate, customerid
    FROM sales_orders_sheet
    GROUP BY orderdate, customerid
    HAVING COUNT(*) > 1
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:40:39