Mysql中较为复杂的分组统计去重复值
- //求出分组统计
- $att = $result->execute("select userid ,count(userid) as total,name from (select distinct userid,name from att_sumbase WHERE time BETWEEN '11:30' AND '12:30' union all select distinct userid,name from att_sumbase WHERE time BETWEEN '17:30' AND '18:30' order by userid) as foo group by userid");
- //求得总数
- $sum = $result->execute("select sum(sum) as allnum from (select userid,count(distinct userid) as sum ,date,time,name from att_sumbase WHERE time BETWEEN '11:30' AND '12:30' union all select userid,count(distinct userid) as sum ,date,time,name from att_sumbase WHERE time BETWEEN '17:30' AND '18:30' ) as foo");
- 在处理一个大数据量数据库的时候
- 突然发现mysql对于count(*)的不同处理会造成不同的结果
- 比如执行
- SELECT count(*) FROM tablename
- 即使对于千万级别的数据mysql也能非常迅速的返回结果
- 而对于
- SELECT count(*) FROM tablename WHERE.....
- mysql的查询时间开始攀升
- 仔细查阅累下手册,发现当没有WHERE语句对于整个mysql的表进行count运算的时候
- MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候Mysql需要对整个表进行检索
- 从而得出count的数值
- 突然又想起来看到的不少新兴的php程序对于count的处理并没有很好的意识到这点
- 记录下
- 顺便提下mysql的DISTINCT的关键字有很多你想不到的用处
- 1.在count 不重复的记录的时候能用到
- 比如SELECT COUNT( DISTINCT id ) FROM tablename;
- 就是计算talbebname表中id不同的记录有多少条
- 2,在需要返回记录不同的id的具体值的时候可以用
- 比如SELECT DISTINCT id FROM tablename;
- 返回talbebname表中不同的id的具体的值
- 3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义
- 比如SELECT DISTINCT id, type FROM tablename;
- 实际上返回的是 id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样
- 4.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的
- 5.其实还有另外一种解决方式,就是使用
- SELECT id, type, count(DISTINCT id) FROM tablename
- 虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据)
- 返回的结果是 只有id不同的所有结果和上面的4类型可以互补使用,就是看你需要什么样的数据了
Mysql中较为复杂的分组统计去重复值的更多相关文章
- Mysql 根据时间戳按年月日分组统计
Mysql 根据时间戳按年月日分组统计create_time时间格式SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM ...
- mysql按某一字段分组取最大(小)值所在行的数据
mysql按某一字段分组取最大(小)值所在行的数据 mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...
- mysql加强(3)~分组(统计)查询
一.分组(统计) 查询 1.语法 : select [distinct] *| 分组字段1[别名] [,分组字段2[别名],...] | 统计函数 from 表名 [别名] [where 条件(s)] ...
- EXCEL统计不重复值的数量
如这一列中,有多少不重复值? 1.可以点击,数据,删除重复项,清除重复值,然后剩下的统计一下即可知道: ===> 2.用公式:=SUMPRODUCT((MATCH(E3:E20,E3 ...
- JS 数组去重复值
var arr1 = [90, 91, 92]; var arr2 = [80, 81]; var arr3 = [80, 71, 72, 73]; var arr = arr1.concat(50, ...
- MySql按周/月/日分组统计数据的方法
知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case grou ...
- mysql中生产表格多列统计问题
for Example: select date_format(date,'%Y-%m-%d') as day, count(case when xinghao='a' then 1 end) as ...
- 【转】Mysql 根据时间戳按年月日分组统计
create_time时间格式 SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY week ...
- mysql之group by进行分组统计
格式: select 字段1,字段2 from 表名 where 条件 group by 字段 样例一: 1.需要每个市的对应数据 -- 计算 审批完成时间和提交审批时间天数(总时间差) 总数据量 行 ...
随机推荐
- Maven部署(linux)
1.下载 进入http://maven.apache.org/download.cgi下载.或者使用wget命令. mkdir /opt/maven cd /opt/maven wget http:/ ...
- Centos 6.5 安装python3.6
废话不多说,直接上步骤 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2rc1.tgz 进入 https://www.python.o ...
- 使用stackOfIntegers实现降序素数
使用stackOfIntegers实现降序素数 代码如下: package day06; public class TestSU { public static void main(String[] ...
- Xamarin Android绑定微信SDK
现在几乎所有的APP都集成了向微博,微信等社交平台分享的功能.这些社交平台官方也提供了SDK让开发者使用,对于Android和IOS平台而言,只需要下载官方的SDK,按照官方说明文档进行集成就可以轻松 ...
- Android 自定义 permission
Android 自定义 permission Android 添加自定义权限 permission-tree 权限的根节点,3个成员都要定义 name 一般来说需要2个".":比如 ...
- b.控制结构
1. if/ if... else...与java 相同. 2.while/ do while 用法与java 相同,返回值始终为Unit. 3.for循环终于有自己的风格,如下: // <- ...
- express 最佳实践(二):中间件
express 最佳实践(二):中间件 第一篇 express 最佳实践(一):项目结构 express 中最重要的就是中间件了,可以说中间件组成了express,中间件就是 express 的核心. ...
- (转)Spring并发访问的线程安全性问题(高度总结)
下面的记录对spring中并发的总结.理论分析参考Spring中Singleton模式的线程安全,建议先看 spring中的并发访问题: 我们知道在一般情况下,只有无状态的Bean才可以在多线程环境下 ...
- 机器学习(4)Hoeffding Inequality--界定概率边界
问题 假设空间的样本复杂度(sample complexity):随着问题规模的增长导致所需训练样本的增长称为sample complexity. 实际情况中,最有可能限制学习器成功的因素是训练数据的 ...
- 浅谈Vue不同场景下组件间的数据交流
浅谈Vue不同场景下组件间的数据“交流” Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完 ...