首页 游戏 软件 资讯 排行榜 专题
首页
数据库
SQL怎样统计非重复值的数量_使用COUNT DISTINCT处理

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

热心网友
68
转载
2026-04-29

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。问题根源在于,textntextimage 这些比较旧的数据类型,本身就不支持 DISTINCTGROUP 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

来源:https://www.php.cn/faq/2319617.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

视频配音翻译多角色分离技术实践与避坑指南
AI教程
视频配音翻译多角色分离技术实践与避坑指南

短剧配音翻译中,多角色识别面临背景音乐干扰、台词切换快、多人重叠及情绪变化等挑战。需构建完整工程链路,包括人声预处理、嵌入向量提取与聚类等环节,并调整参数以控制错误。输出需提供时间线、说话人标签及异常标记,为后续翻译与配音提供稳定角色轨道,确保作品连贯性。

热心网友
05.28
HTTP缓存机制详解强制缓存与协商缓存工作原理
AI教程
HTTP缓存机制详解强制缓存与协商缓存工作原理

HTTP缓存分为强制缓存与协商缓存两层。强制缓存通过Cache-Control等响应头控制,命中时浏览器直接使用本地资源。协商缓存在强制缓存失效后触发,通过Last-Modified If-Modified-Since或ETag If-None-Match与服务器验证资源是否更新,未更新则返回304状态码。SpringBoot等框架可便捷配置缓存策略,针对不

热心网友
05.28
易方达基金减持中国银河638万股股份详情
科技数码
易方达基金减持中国银河638万股股份详情

5月21日,易方达基金以每股约7 95港元减持中国银河逾638万股,涉资约5075万港元。减持后持股数量降至约2 535亿股,持股比例由7 04%降至6 87%。

热心网友
05.28
奶龙治愈驯龙冒险开启 5月26日全平台正式上线
游戏资讯
奶龙治愈驯龙冒险开启 5月26日全平台正式上线

咪咕互娱自研治愈冒险手游《驯龙之旅》于5月26日全平台上线,全网预约量已超百万。游戏融合轻松放置与深度策略养成,并与国民IP“奶龙”深度联动,将其设定为限定冒险伙伴,推出专属剧情与活动。上线同步开启多项公测福利,旨在为玩家提供兼具休闲治愈与策略乐趣的体验。

热心网友
05.28
Malr1ne目标复刻去年TI夺冠辉煌战绩
游戏资讯
Malr1ne目标复刻去年TI夺冠辉煌战绩

Valve公布2026年国际邀请赛七支直邀战队名单。上届冠军Falcons的中单选手Malr1ne对此表示欣喜,期待队伍能重现去年的成功。

热心网友
05.28

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

中国微型电脑主机海外热销算力服务加速全球布局
AI资讯
中国微型电脑主机海外热销算力服务加速全球布局

全球人工智能浪潮中,中国算力服务与智能硬件加速出海,成为外贸增长新引擎。汕头通过“来数加工”试点实现合规数据出海,日均调用量达百亿级;深圳微型电脑主机占据全球约15%市场份额,支撑海外轻量化算力需求。服务创新与硬件普及相辅相成,共同推动中国算力红利走向世界。

热心网友
05.28
英雄联盟手游NBA联动皮肤上线 三大球队限定款即将登场
游戏资讯
英雄联盟手游NBA联动皮肤上线 三大球队限定款即将登场

《英雄联盟手游》宣布与NBA中国及景德镇青花瓷联动。将推出三支NBA球队限定英雄皮肤及守护灵,并上线玩家票选的青花瓷主题守护灵。游戏内新增限时娱乐模式,英雄可随机“变猫”。英雄联盟手游超级联赛常规赛将恢复线下举办,打造沉浸式观赛场景。

热心网友
05.28
高考期间大模型禁用答疑功能 严防作弊维护考场公平
AI资讯
高考期间大模型禁用答疑功能 严防作弊维护考场公平

随着高考进入关键冲刺阶段,一则关于“高考期间AI工具功能受限”的消息迅速引发广泛关注,牵动了考生与家长群体的敏感神经。大家最核心的关切在于:常用的智能拍题、搜题答疑等功能是否会受到影响?对此,国内主流人工智能服务商——字节跳动豆包、腾讯元宝、百度文心一言以及科大讯飞,近日已陆续作出官方说明。 综合各

热心网友
05.28
AI时代开源协议面临消亡风险malus案例引发行业反思
AI教程
AI时代开源协议面临消亡风险malus案例引发行业反思

AI时代,开源协议约束力面临挑战。AI可低成本自动化重写代码,生成功能相同但实现迥异的新版本,从而规避原有许可证对代码复制和分发的限制。这动摇了开源协议依赖“复制代码”建立约束的基础,使得单纯开源代码难以形成有效壁垒。未来,项目的护城河可能更多转向品牌、社区、数据等维度。

热心网友
05.28
双重曝光人像效果怎么用即梦AI制作
AI资讯
双重曝光人像效果怎么用即梦AI制作

想用即梦AI创作出专业级的双重曝光人像作品,却总感觉融合生硬、光影突兀?这通常是由于提示词结构不完整、参考图使用不当或模型参数选择有误造成的。掌握核心方法,你也能轻松实现人物与景观的像素级自然融合。 无需复杂操作,核心路径只有三条:借助“参考图+精准提示词”进行锚定创作,依靠“纯提示词三段式”进行语

热心网友
05.28