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
相关攻略
电热毯折叠存放后,原则上不建议继续使用,更不可通电加热 先说一个核心判断:折叠存放后的电热毯,最好别再用,更别急着通电。这可不是危言耸听,而是有硬性标准支撑的。根据中国家用电器研究院发布的《电热毯安全使用指南》以及国家强制性标准GB 4706 8-2018的规定,事情是这样的:普通电热毯内部的电热丝
2026励志口号50句精选汇总:穿越周期的精神燃料 口号,常被定义为“供口头呼喊的有纲领性和鼓动作用的简短句子”。但换个角度看,它们更像是浓缩了智慧与行动力的精神燃料,尤其在充满不确定性的时代,一句有力的口号,足以点燃内心的引擎。今天,我们就来盘点一份精选的励志口号集锦,它们历经时间考验,或许能为你
最新励志口号50句精选大盘点:穿透喧嚣的智慧回响 口号,常被定义为“供口头呼喊的有纲领性和鼓动作用的简短句子”。这话没错,但只说对了一半。真正有力量的口号,远不止是呼喊,它更像是一粒思想的种子,能在人心深处扎根,在关键时刻迸发出改变行为的力量。不同气质的口号,自然扮演着不同的角色。今天,我们就来一起
用喜悦添加激情,用喜庆增添勇气,用喜乐调动坚持,用喜气复制毅力,用喜欢追求梦想,用喜笑保持激情 假期归来,如何快速找回工作状态?不妨试试这个配方:用喜悦为你的日常注入激情,用喜庆的氛围为自己增添几分勇气。当坚持变得困难时,想想假期的喜乐,它能帮你调动内心的韧性;而那份过节的喜气,完全可以复制成面对挑
一朝习惯,万事易办 你看,成功的背后,往往站着一个名叫“习惯”的盟友。良好的习惯,正是那份最可靠的保证。 这话一点不假:好习惯能成就一生,而坏习惯,真的可能毁掉一个人的前程。与之相配的,是好方法——好方法让你事半功倍,好习惯则让你受益终身。当习惯与智慧联手,便能创造奇迹;当理想与信心结合,便可换取无
热门专题
热门推荐
要提升HDFS集群的稳定性,这些配置与优化思路值得关注 想让你的Hadoop分布式文件系统(HDFS)集群运行得更稳定、更可靠吗?这既是一项系统工程,也有一套清晰的优化路径——关键在于,你是否在硬件选型、参数配置、运维管理等核心层面都进行了系统性的规划与调优。下面这张图,可以帮助你快速建立起一个关于
HDFS副本策略调整指南 一 核心概念与层级 要玩转HDFS的副本策略,得先理清几个核心概念。它们像齿轮一样层层咬合,共同决定了数据最终落在哪里。 副本因子:这个最好理解,就是一个数据块要存几份。它直接决定了数据的可靠性和存储开销,默认值是3,算是可靠性与成本之间的经典平衡点。 副本放置策略:这是N
HDFS:一个为容错而生的分布式文件系统 在分布式存储领域,数据的安全性与可靠性是系统设计的核心。HDFS(Hadoop分布式文件系统)之所以能成为大数据生态的基石,关键在于其设计了一套多层次、自动化的容错机制。这套机制确保了在硬件故障、网络异常等常见问题发生时,数据依然保持完整且服务持续可用。本文
在HDFS中设置合理权限:一份实战指南 在Hadoop分布式文件系统(HDFS)中,权限管理绝非小事。它直接关系到数据的安全底线和系统的稳定运行。那么,如何为HDFS中的文件和目录设置一套既安全又实用的权限规则呢?下面这份指南,或许能给你带来清晰的思路。 1 基本概念 在动手之前,先得理清几个核心
在Hadoop分布式文件系统(HDFS)中实现数据压缩 处理海量数据时,存储成本与传输效率是两大核心挑战。HDFS提供了多种数据压缩方案,能够有效降低存储空间占用并提升数据处理性能。本文将详细介绍在HDFS中启用和配置数据压缩的几种实用方法。 1 配置文件设置 最直接且全局生效的方式是通过修改Ha





