- 浏览: 216294 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (109)
- C# (29)
- ASP.NET (30)
- MSSQL (29)
- javascript (9)
- cmd (3)
- ORACLE (4)
- log4j (1)
- window (5)
- FTP (1)
- Shell (1)
- java (1)
- IIS (7)
- html (11)
- SQL (3)
- Jquery (11)
- IE (3)
- 火狐、谷歌 (2)
- wince (2)
- JSON (5)
- List (1)
- Foreach (1)
- SQLhelper (1)
- Ajax (1)
- Firebird (1)
- mysql (7)
- js (2)
- jQuery.autocomplete (1)
- dataTable (1)
- Http (1)
- get (1)
- datetime (1)
- powshell (1)
- URL Protocol (1)
- Office (1)
- Excel (1)
- ASP.NET,算法,秘钥 (1)
- 浏览器 (1)
- Tomcat (1)
最新评论
在数据库操作中,我们常常遇到需要将数据去重计数的工作。例如:
表A,列col
A
C
A
B
C
D
A
B
结果就是一共出现4个不同的字母A、B、C、D
即结果为4
大体上我们可以选择count(distinct col)的方法和group+count的方法。
分别为:
select count(distinct col) from A;
select count(1) from (select 1 from A group by col) alias;
两中方法实现有什么不同呢?
其实上述两中方法分别是在运算和存储上的权衡。
distinct需要将col列中的全部内容都存储在一个内存中,可以理解为一个hash结构,key为col的值,最后计算hash结构中有多少个key即可得到结果。
很明显,需要将所有不同的值都存起来。内存消耗可能较大。
而group by的方式是先将col排序。而数据库中的group一般使用sort的方法,即数据库会先对col进行排序。而排序的基本理论是,时间复杂为nlogn,空间为1.,然后只要单纯的计数就可以了。优点是空间复杂度小,缺点是要进行一次排序,执行时间会较长。
两中方法各有优劣,在使用的时候,我们需要根据实际情况进行取舍。
具体情况可参考如下法则
数据分布 去重方式 原因
离散 group distinct空间占用较大,在时间复杂度允许的情况下,group 可以发挥空间复杂度优势
集中 distinct distinct空间占用较小,可以发挥时间复杂度优势
两个极端:
1.数据列的所有数据都一样,即去重计数的结果为1时,用distinct最佳
2.如果数据列唯一,没有相同数值,用group 最好
当然,在group by时,某些数据库产品会根据数据列的情况智能地选择是使用排序去重还是hash去重,例如postgresql。当然,我们可以根据实际情况对执行计划进行人工的干预,而这不是这里要讨论的话题了。
来源于:http://liuzhiqiangruc.iteye.com/blog/1461038
表A,列col
A
C
A
B
C
D
A
B
结果就是一共出现4个不同的字母A、B、C、D
即结果为4
大体上我们可以选择count(distinct col)的方法和group+count的方法。
分别为:
select count(distinct col) from A;
select count(1) from (select 1 from A group by col) alias;
两中方法实现有什么不同呢?
其实上述两中方法分别是在运算和存储上的权衡。
distinct需要将col列中的全部内容都存储在一个内存中,可以理解为一个hash结构,key为col的值,最后计算hash结构中有多少个key即可得到结果。
很明显,需要将所有不同的值都存起来。内存消耗可能较大。
而group by的方式是先将col排序。而数据库中的group一般使用sort的方法,即数据库会先对col进行排序。而排序的基本理论是,时间复杂为nlogn,空间为1.,然后只要单纯的计数就可以了。优点是空间复杂度小,缺点是要进行一次排序,执行时间会较长。
两中方法各有优劣,在使用的时候,我们需要根据实际情况进行取舍。
具体情况可参考如下法则
数据分布 去重方式 原因
离散 group distinct空间占用较大,在时间复杂度允许的情况下,group 可以发挥空间复杂度优势
集中 distinct distinct空间占用较小,可以发挥时间复杂度优势
两个极端:
1.数据列的所有数据都一样,即去重计数的结果为1时,用distinct最佳
2.如果数据列唯一,没有相同数值,用group 最好
当然,在group by时,某些数据库产品会根据数据列的情况智能地选择是使用排序去重还是hash去重,例如postgresql。当然,我们可以根据实际情况对执行计划进行人工的干预,而这不是这里要讨论的话题了。
来源于:http://liuzhiqiangruc.iteye.com/blog/1461038
发表评论
-
用一条insert语句来插入多行数据
2016-05-23 10:35 1755oracle、sqlserver不支持inse ... -
mysql和mssql关键字key的转义
2016-05-20 10:30 790mysql反引号``,它在键盘的~这个键上,SqlServer ... -
SQL几种分页语句性能对比
2014-03-07 10:35 488SET STATISTICS IO ON select * ... -
MSQL2005以上对象名sysproperties 无效的错误
2014-03-03 11:59 1421在MSSQL2008R2里面执行的时候报错:对象名syspro ... -
IN和EXISTS性能上的区别
2014-02-24 16:46 825在外表大内部小的情况下,EXISTS性能比IN快,如果两个表的 ... -
SQL Server 2000 ——系统表和系统视图
2014-02-17 10:26 1211一、一般存储过程 1、 ... -
新增链接服务器
2014-02-17 10:19 785新增链接服务器 if exists (select * fro ... -
在MSSQL2000里面 对象名 'sys.servers' 无效 服务器: 消息 208,级别 16,状态 1,行 1
2014-02-17 10:12 3205在MSSQL2000里面不支持该 sys.servers查看 ... -
SQL SERVER2008数据库中创建和删除链接服务器
2014-02-11 13:43 5024--在SQL SERVER 2008里,可以按以下的方式建立链 ... -
SQL Server获取某月某季某年最后一天的SQL语
2013-11-25 20:26 1413项目中用到的,获取已知年份的第一天和最后一天,觉得网来的不错, ... -
SQL IO、性能
2013-08-30 09:04 1004转载地址:http://blog.csdn.n ... -
sql中两个日期相减
2013-08-21 13:36 9045sql中两个日期相减 1、相差天数 select trun ... -
SET STATISTICS IO ON和获取表中的所有行
2013-08-14 11:58 703SET STATISTICS IO ON --通过来查看扫描 ... -
SQL CAST和CONVERT区别
2013-08-09 09:06 702一种数据类型的表达式转换为另一种数据类型的表达式。 CAS ... -
图表处理程序配置 [c:\TempImageFiles\] 中的临时目录无效
2013-07-24 11:15 3708图表处理程序配置 [c:\TempImageFiles\] 中 ... -
MS-SQL2005以上的版本解决Syscolumn表中数据不能修改
2013-07-06 11:41 593例如: 在MSSQL2000里面可以获取到相应的数据 获取Tr ... -
asp.net 在webcofig中连接数据库方式
2013-07-02 14:38 7531:window方式验证 <connectionStri ... -
解决用户 'IIS APPPOOL\Classic .NET AppPool' 登录失败 windows 7
2013-07-02 14:31 1142进入iis管理器 本地应用程序池 选中classic. net ... -
分页效果
2013-05-20 19:19 893转载http://jianfulove.iteye.com/b ... -
MS-SQL将已建的表的某个字段修改为默认的值
2013-05-15 16:48 819ALTER TABLE STOCK_INFO ADD CON ...
相关推荐
在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两个非常重要的SQL关键字,它们都可以用来处理数据的去重问题,但在实际应用中,两者的使用场景和效果有所差异。 首先,`DISTINCT` 关键字的主要作用是去除查询结果中...
我就废话不多说了,大家还是直接看代码吧! contacts = ... return house.distinct() 合并出来的queryset,再去重。 补充知识:Python——深入理解urllib、urllib2及requests(requests不建议使用?)
平时,我们将c#中的Distinct大多用于对数组去重,一般数组为基础的数据类型,例如 int,string.也可以用于对象去重,我们看看C#对Distinct方法的定义: 有重载,第一个参数都加了this,是拓展方法,有关拓展方法,请...
总结来说,MongoDB 的聚合功能是其强大之处,`count`、`distinct` 和 `group` 提供了对数据进行统计、查找唯一值和复杂分组的能力,从而满足了数据分析和报告的各种需求。在实际项目中,这些聚合操作可以帮助开发者...
用C#实现对DataTable的JOIN,GROUP BY,FILTER,UNIONALL,DISTINCT
对于查询结果去重,可以使用distinct关键字标注需要去重的字段,也可以使用group by + 关键字。 使用distinct关键字可以取得不重复的值,例如:Select distinct name from Lin_test将会取得name列的不重复的值。...
在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两种用于数据去重和分组统计的SQL语句,它们虽然都可以帮助我们处理重复数据,但有着不同的应用场景和执行机制。 1. `DISTINCT` 关键字: - `DISTINCT` 主要用于去除...
今天遇到一个数组再分组的情况,思路是先找到分组的原则,之后再遍历一次得到分组的数据。 就是把所有重复的数据去掉,(分组依据) 重写了IEqualityComparer接口,并实现了它,但是有一点当明没有搞明白。...
`DISTINCT`通常与`GROUP BY`和聚合函数(如`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`)一起使用,用于计算每个分组的唯一值。例如,计算每个部门的员工数量: ```sql SELECT DISTINCT department, COUNT(*) AS employee...
完美解决distinct中使用多个字段的方法,完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法
在MySQL数据库中,`DISTINCT`和`GROUP BY`是两个非常重要的查询语句,它们在处理数据去重和分组方面发挥着关键作用。本文将详细介绍这两个语句的使用方法。 首先,`DISTINCT`关键字是用来去除查询结果中重复记录的...
在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两个用于数据去重的语句,但它们在功能和性能上有显著的区别。这次的测试主要比较了这两种方法在不同条件下的执行效率,尤其是在数据量较大的情况下。 首先,`...
说到对集合去重处理,第一时间想到的肯定是Linq的Distinct扩展方式,对于一般的值类型集合去重,很好处理,直接list.Distinct()即可。但是如果想要对一个引用类型的集合去重(属性值都相同就认为重复),就会发现,...
此外,如果你的数据库支持窗口函数(如SQL Server的`ROW_NUMBER()`),你可以考虑使用它们与`PARTITION BY`一起,以在数据库层面同时实现去重和排序,这样通常能提供更好的性能。 总之,使用EFCore查询不重复数据并...
在MySQL数据库中,`DISTINCT` 是一个非常重要的SQL关键字,用于从查询结果中去除重复的行。在处理数据时,我们经常会遇到需要提取唯一值...根据实际需求,结合`GROUP BY`和聚合函数,可以实现更复杂的去重和统计操作。