SQL怎样统计非重复值的数量_使用COUNT DISTINCT处理
SQL怎样统计非重复值的数量:使用COUNT DISTINCT处理

COUNT DISTINCT 会忽略 NULL 吗?
答案是肯定的。COUNT(DISTINCT column_name) 默认会跳过所有的 NULL 值,它们压根儿不参与去重计数。这意味着,如果你的字段里存在大量 NULL,而你却误以为它们被算进去了,最终的统计结果就会比预期偏低。
想验证这一点?方法其实很简单。你可以分别执行下面这两条查询:
SELECT COUNT(DISTINCT col) FROM t; SELECT COUNT(DISTINCT col) + COUNT(*) FILTER (WHERE col IS NULL) FROM t;
后面这条语句的结果,才是“非重复值 + NULL 的个数”。不过得提醒一下,这里的 FILTER 是 PostgreSQL 的语法;在 MySQL 和 SQL Server 里并不支持,你得用 CASE WHEN 来模拟实现。
MySQL 8.0 之前没法直接 COUNT DISTINCT 多列?
没错,这确实是个历史遗留的“坑”。在老版本的 MySQL(比如经典的 5.7)里,直接写 COUNT(DISTINCT a, b) 是会报语法错误的。那怎么办呢?通常得绕个弯子:
- 用
CONCAT(a, '|', b)把字段拼接起来再计数(前提是确保字段值里不包含分隔符|,否则可能把不同的值错误地合并)。 - 更稳妥的做法是借助子查询先完成去重:
SELECT COUNT(*) FROM (SELECT DISTINCT a, b FROM t) AS tmp。 - 需要注意的是,子查询这种方式在数据量非常大的时候,性能可能会下降,因为它可能需要物化一个临时表。
PostgreSQL 里 COUNT DISTINCT 比 GROUP BY + COUNT 快吗?
通常来说,并不会更快,有时甚至会更慢。原因在于,COUNT(DISTINCT x) 在数据库内部同样需要进行哈希或排序来实现去重,其底层开销和显式地写 SELECT COUNT(*) FROM (SELECT DISTINCT x FROM t) s 是接近的。
但两者的关键区别在于应用场景的灵活性:
COUNT(DISTINCT)作为一个聚合函数,可以很方便地和其他聚合运算混合使用(比如,在同一查询里同时计算A VG(price)和去重的用户数)。- 而使用
GROUP BY的子查询,通常只能返回一个单一的计数结果。如果想再加入其他指标,就得借助JOIN或者公共表表达式(CTE)了。 - 如果只是统计单个字段的去重数量,两者的性能差异其实不大。不过,当字段中包含大量重复值时,
GROUP BY有时会略占优势,因为查询优化器有可能提前终止某些计算。
SQL Server 中 DISTINCT 遇到 text / ntext 类型报错怎么办?
这时候你会遇到一个典型的错误:Operand data type text is invalid for distinct operator。问题根源在于,text、ntext、image 这些比较旧的数据类型,本身就不支持 DISTINCT 或 GROUP BY 操作。
解决办法是必须先进行类型转换:
- 使用
CAST(col AS VARCHAR(MAX))或CONVERT(VARCHAR(MAX), col)。 - 需要警惕的是,如果文本内容超过 2GB,连
VARCHAR(MAX)也装不下,这时就得考虑改用XML类型或者分块处理等策略了。 - 从长远来看,最好的实践是将表结构升级,使用
varchar(max)或nvarchar(max)这些新的类型,它们对DISTINCT有着完整的支持。
实际的写法可以参考这个示例:SELECT COUNT(DISTINCT CAST(description AS VARCHAR(MAX))) FROM products
相关攻略
短剧配音翻译中,多角色识别面临背景音乐干扰、台词切换快、多人重叠及情绪变化等挑战。需构建完整工程链路,包括人声预处理、嵌入向量提取与聚类等环节,并调整参数以控制错误。输出需提供时间线、说话人标签及异常标记,为后续翻译与配音提供稳定角色轨道,确保作品连贯性。
HTTP缓存分为强制缓存与协商缓存两层。强制缓存通过Cache-Control等响应头控制,命中时浏览器直接使用本地资源。协商缓存在强制缓存失效后触发,通过Last-Modified If-Modified-Since或ETag If-None-Match与服务器验证资源是否更新,未更新则返回304状态码。SpringBoot等框架可便捷配置缓存策略,针对不
5月21日,易方达基金以每股约7 95港元减持中国银河逾638万股,涉资约5075万港元。减持后持股数量降至约2 535亿股,持股比例由7 04%降至6 87%。
咪咕互娱自研治愈冒险手游《驯龙之旅》于5月26日全平台上线,全网预约量已超百万。游戏融合轻松放置与深度策略养成,并与国民IP“奶龙”深度联动,将其设定为限定冒险伙伴,推出专属剧情与活动。上线同步开启多项公测福利,旨在为玩家提供兼具休闲治愈与策略乐趣的体验。
Valve公布2026年国际邀请赛七支直邀战队名单。上届冠军Falcons的中单选手Malr1ne对此表示欣喜,期待队伍能重现去年的成功。
热门专题
热门推荐
全球人工智能浪潮中,中国算力服务与智能硬件加速出海,成为外贸增长新引擎。汕头通过“来数加工”试点实现合规数据出海,日均调用量达百亿级;深圳微型电脑主机占据全球约15%市场份额,支撑海外轻量化算力需求。服务创新与硬件普及相辅相成,共同推动中国算力红利走向世界。
《英雄联盟手游》宣布与NBA中国及景德镇青花瓷联动。将推出三支NBA球队限定英雄皮肤及守护灵,并上线玩家票选的青花瓷主题守护灵。游戏内新增限时娱乐模式,英雄可随机“变猫”。英雄联盟手游超级联赛常规赛将恢复线下举办,打造沉浸式观赛场景。
随着高考进入关键冲刺阶段,一则关于“高考期间AI工具功能受限”的消息迅速引发广泛关注,牵动了考生与家长群体的敏感神经。大家最核心的关切在于:常用的智能拍题、搜题答疑等功能是否会受到影响?对此,国内主流人工智能服务商——字节跳动豆包、腾讯元宝、百度文心一言以及科大讯飞,近日已陆续作出官方说明。 综合各
AI时代,开源协议约束力面临挑战。AI可低成本自动化重写代码,生成功能相同但实现迥异的新版本,从而规避原有许可证对代码复制和分发的限制。这动摇了开源协议依赖“复制代码”建立约束的基础,使得单纯开源代码难以形成有效壁垒。未来,项目的护城河可能更多转向品牌、社区、数据等维度。
想用即梦AI创作出专业级的双重曝光人像作品,却总感觉融合生硬、光影突兀?这通常是由于提示词结构不完整、参考图使用不当或模型参数选择有误造成的。掌握核心方法,你也能轻松实现人物与景观的像素级自然融合。 无需复杂操作,核心路径只有三条:借助“参考图+精准提示词”进行锚定创作,依靠“纯提示词三段式”进行语





