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

SQL查询:获取被超过10位用户选择的颜色名称

解决方案

没问题,这是个很常见的分组统计需求,我给你两种可行的SQL写法,还会说明各自的适用场景:

写法一:直接关联后分组筛选

这种写法逻辑直观,适合数据量不大的场景:

SELECT c.color_name
FROM User u
JOIN Color c ON u.c_id = c.c_id
GROUP BY u.c_id, c.color_name
HAVING COUNT(u.u_id) > 10;

关键步骤解释:

  • JOIN Color c ON u.c_id = c.c_id:把用户选择的颜色ID和颜色表关联,拿到对应的颜色名称。
  • GROUP BY u.c_id, c.color_name:按颜色ID和名称分组(虽然理论上一个c_id对应唯一的color_name,但一起分组能避免数据异常导致的错误)。
  • HAVING COUNT(u.u_id) > 10:必须用HAVING而不是WHERE,因为我们要筛选的是分组后的统计结果(用户数量超过10),WHERE只能在分组前过滤行数据。

写法二:子查询先统计再关联

如果你的User表数据量很大,这种写法性能会更好——先在子查询里完成统计筛选,减少后续关联的数据量:

SELECT c.color_name
FROM (
    SELECT c_id
    FROM User
    GROUP BY c_id
    HAVING COUNT(u_id) > 10
) AS color_counts
JOIN Color c ON color_counts.c_id = c.c_id;

额外提示:

题目提到每位用户仅能选择一种颜色,所以User表的u_id应该是唯一的,直接COUNT(u_id)就足够准确。如果实际存在重复的u_id(比如脏数据),可以改成COUNT(DISTINCT u.u_id),确保每个用户只被统计一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:44