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

MySQL查询优化:获取集群内所有用户均评分的企业

解决MySQL查询集群内全用户评分企业的问题

我来帮你搞定这个需求!你要找的是指定集群内所有用户都已评分的企业——也就是只要集群里有任何一个用户没给某企业评分,就直接排除掉它。核心思路很清晰:先算出目标集群的用户总数,再统计每个企业被该集群内多少用户评分,只保留评分用户数等于集群总用户数的企业,最后关联其他表拿到你需要的所有字段。

修改后的查询语句如下:

SELECT 
  muc.primaryUser,
  muc.clusterId,
  mr.companyId,
  mr.rating,
  mul.groupId
FROM ml_user_clusters muc
JOIN ml_ratings mr ON mr.userId = muc.primaryUser
JOIN ml_company_user_labels mcul ON mcul.companyId = mr.companyId
JOIN ml_user_labels mul ON mul.groupId = mcul.labelId
-- 筛选出符合条件的企业:被集群内所有用户评分
WHERE muc.clusterId = 0
AND mr.companyId IN (
  SELECT mr_inner.companyId
  FROM ml_user_clusters muc_inner
  JOIN ml_ratings mr_inner ON mr_inner.userId = muc_inner.primaryUser
  WHERE muc_inner.clusterId = 0
  GROUP BY mr_inner.companyId
  -- 统计该企业被多少集群内用户评分,等于集群总用户数则保留
  HAVING COUNT(DISTINCT mr_inner.userId) = (
    SELECT COUNT(DISTINCT primaryUser) 
    FROM ml_user_clusters 
    WHERE clusterId = 0
  )
);

关键部分解释:

  1. 集群用户总数统计:(SELECT COUNT(DISTINCT primaryUser) FROM ml_user_clusters WHERE clusterId = 0) 这个子查询会算出clusterId=0集群里的总用户数,明确我们需要多少个用户评分才算“全用户覆盖”。
  2. 筛选合格企业:内层的GROUP BY mr_inner.companyId + HAVING COUNT(DISTINCT mr_inner.userId) = ... 会统计每个企业被集群内多少用户评分,只有评分用户数完全匹配集群总用户数的企业才会被选中。
  3. 关联拿全字段:最后把筛选出的合格企业ID和原表关联,就能拿到你需要的primaryUser、rating、groupId等所有字段了。

按照这个语句执行,就能得到你预期的、仅包含groupId=6的企业的所有相关记录啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:20:36