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

SQL查询报错:如何正确筛选购买游戏数量≥3的用户?

问题排查与正确SQL写法

原语句报错原因

  • 第一个语句错误:COUNT()属于聚合函数,WHERE子句执行时机在聚合计算之前,不允许直接使用聚合函数作为过滤条件,触发语法报错。
  • 第二个语句错误:GROUP BY CUSTOMER_ID之后,SELECT列表里的字段要么是分组依据(即CUSTOMER_ID),要么需要被聚合函数包裹,直接返回未聚合的PRODUCT_ID、PRODUCT_NAME、EMAIL不符合SQL语法规范,即使部分低版本非严格模式的MySQL能运行,返回结果也不符合预期。

正确写法

写法1:子查询匹配符合条件的用户(兼容性最好,支持所有SQL引擎)

先通过子查询筛选出购买数≥3的用户ID,再关联原表返回这些用户的所有购买明细:

SELECT p.PRODUCT_ID, p.CUSTOMER_ID, p.EMAIL, p.PRODUCT_NAME
FROM People_who_bought_games p
INNER JOIN (
    SELECT CUSTOMER_ID
    FROM People_who_bought_games
    GROUP BY CUSTOMER_ID
    HAVING COUNT(PRODUCT_ID) >= 3
) qualified_users ON p.CUSTOMER_ID = qualified_users.CUSTOMER_ID

如果仅需要去重的用户信息,不需要每个购买的游戏明细,直接使用以下语句:

SELECT DISTINCT CUSTOMER_ID, EMAIL
FROM People_who_bought_games
WHERE CUSTOMER_ID IN (
    SELECT CUSTOMER_ID
    FROM People_who_bought_games
    GROUP BY CUSTOMER_ID
    HAVING COUNT(PRODUCT_ID) >= 3
)

写法2:窗口函数(适用于MySQL8.0+/PostgreSQL/SQL Server等支持窗口函数的引擎)

SELECT PRODUCT_ID, CUSTOMER_ID, EMAIL, PRODUCT_NAME
FROM (
    SELECT 
        *,
        COUNT(PRODUCT_ID) OVER (PARTITION BY CUSTOMER_ID) AS buy_count
    FROM People_who_bought_games
) t
WHERE buy_count >=3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:27:03