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

多关联表中去重统计customers.userid的MySQL语法问题

解决方法

你的SQL主要存在这些问题:

  1. COUNT语法错误:select DISTINCT COUNT sub2.userid是错误写法,MySQL中统计去重字段的数量,正确格式是COUNT(DISTINCT 字段名)。
  2. 关联字段写错:customers.id=customerscategories.adid里的adid应该是Customerid——根据你的表结构,customerscategories的外键列是Customerid,对应customers的Id字段。
  3. 子查询冗余:你的SQL嵌套了过多不必要的层级,完全可以简化写法,提升可读性和执行效率。

简化后的正确SQL:

直接关联三个表,筛选pcatid=101的记录后统计去重的userid数量:

SELECT COUNT(DISTINCT c.userid) AS unique_user_count
FROM customers c
JOIN customerscategories cc ON c.Id = cc.Customerid
JOIN categories cat ON cc.Catid = cat.Id
WHERE cat.pcatid = 101;

执行这条语句就能得到你期望的结果2。

若要修正原嵌套写法:

调整语法错误、修正关联字段并优化子查询后:

SELECT COUNT(DISTINCT final_sub.userid)
FROM (
    SELECT c.userid
    FROM (
        SELECT sq.id, cat.pcatid
        FROM (
            SELECT c.id, cc.catid
            FROM customers c
            INNER JOIN customerscategories cc ON c.Id = cc.Customerid
        ) AS sq
        INNER JOIN categories cat ON sq.catid = cat.Id
        WHERE cat.pcatid = 101
    ) AS sub
    INNER JOIN customers c ON sub.id = c.id
) AS final_sub;

不过更推荐使用第一个简化版本,逻辑清晰且执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:42:18