sql怎样使用count(distinct)统计不重复值 sql不重复值统计的实用操作方法

浅谈sql数据库去重

上次帮邻居老王整理仓库时,他堆放的旧书里有三四个版本的同名书。
我翻了一下,发现ISBN号都不一样,他坚持要分门别类。
我说最好用Excel去重。
他摇摇头说手写比较舒服。
他边写边咕哝着过去买书的事。
当时,书店老板愿意解释版本的差异。
等等,他说他是1 9 8 5 年买的《围城》,扉页都泛黄了。
在二手网站上还能找到这本书吗?

sqlserver中distinct的用法(不重复的记录)

哦,我必须告诉你这件事。
是真的。
去年有一个大项目。

当时有一个请求。
一张表存储了数千个用户的订单,但同一用户可以下多个同名订单。
领导者必须创建一个报告来查看哪些用户下过订单并且他们不能重复下订单。
本来想用复杂的分组,结果搞得一团糟。

我只是直接使用DISTINCT。
就这句话:
sql 从订单中选择不同的用户名;
嘿嘿,原来如此!当 SQL Server 完成结果时,每个用户名都会出现一次,无论发出多少订单。
领导看了就说,好吧,就用吧。

后来我想为什么这个这么有用。
想想看,表里的数据很多,尤其是自增ID类型加上各种信息。
您不能仅依靠 ID 来删除重复项。
您应该会看到您的用户名或电话号码。
DISTINCT 可帮助您直接查看此栏目。
不管其他列包含什么,只要这一列的值相同,就只算1
但有时我也会陷入陷阱。
我曾经在旧系统上使用过 DISTINCT。
数据量不大,只有几百条,但结果就是发展缓慢。
我一看,哦,原来表也有自己的索引,只是我没注意,加了一个DISTINCT条件。
结果,SQL Server必须先排序,然后过滤,速度很慢。
后来改了索引或者改了写法就好了。

所以当你使用DISTINCT时,取决于数据量。
你可以随意使用少量的数据,但如果使用大量的数据,你应该仔细权衡,不要图省事。
我记得有一次在一个数百GB的桌子上使用它。
花了两个小时才得到结果。
最后还是用分组+枚举更快。

总之,这个东西很有用,但是不要盲目使用,尤其是数据量很大的时候。