这是我的代码:
前提是做了一个view:att_sumbase
首先分开统计每天的中午、下午饭点人数,这时需要分别去除中午和下午重复打卡的人。用了记录集的交,嵌套select的知识。
注意不能直接使用union,这里只能使用union all,因为union会去掉重复记录,一个员工上午吃了,下午也吃了,union只会算一条,而union则能看出一共吃了两次。

  1. //求出分组统计
  2. $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");
  3. //求得总数
  4. $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");


    以下是编程时的借鉴:    
  1. 在处理一个大数据量数据库的时候
  2. 突然发现mysql对于count(*)的不同处理会造成不同的结果
  3. 比如执行
  4. SELECT count(*) FROM tablename
  5. 即使对于千万级别的数据mysql也能非常迅速的返回结果
  6. 而对于
  7. SELECT count(*) FROM tablename WHERE.....
  8. mysql的查询时间开始攀升
  9. 仔细查阅累下手册,发现当没有WHERE语句对于整个mysql的表进行count运算的时候
  10. MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候Mysql需要对整个表进行检索
  11. 从而得出count的数值
  12. 突然又想起来看到的不少新兴的php程序对于count的处理并没有很好的意识到这点
  13. 记录下
  14. 顺便提下mysql的DISTINCT的关键字有很多你想不到的用处
  15. 1.在count 不重复的记录的时候能用到
  16. 比如SELECT COUNT( DISTINCT id ) FROM tablename;
  17. 就是计算talbebname表中id不同的记录有多少条
  18. 2,在需要返回记录不同的id的具体值的时候可以用
  19. 比如SELECT DISTINCT id FROM tablename;
  20. 返回talbebname表中不同的id的具体的值
  21. 3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义
  22. 比如SELECT DISTINCT id, type FROM tablename;
  23. 实际上返回的是 id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样
  24. 4.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的
  25. 5.其实还有另外一种解决方式,就是使用
  26. SELECT id, type, count(DISTINCT id) FROM tablename
  27. 虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据)
  28. 返回的结果是 只有id不同的所有结果和上面的4类型可以互补使用,就是看你需要什么样的数据了

Mysql中较为复杂的分组统计去重复值的更多相关文章

  1. Mysql 根据时间戳按年月日分组统计

    Mysql 根据时间戳按年月日分组统计create_time时间格式SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM ...

  2. mysql按某一字段分组取最大(小)值所在行的数据

    mysql按某一字段分组取最大(小)值所在行的数据   mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...

  3. mysql加强(3)~分组(统计)查询

    一.分组(统计) 查询 1.语法 : select [distinct] *| 分组字段1[别名] [,分组字段2[别名],...] | 统计函数 from 表名 [别名] [where 条件(s)] ...

  4. EXCEL统计不重复值的数量

    如这一列中,有多少不重复值? 1.可以点击,数据,删除重复项,清除重复值,然后剩下的统计一下即可知道:       ===> 2.用公式:=SUMPRODUCT((MATCH(E3:E20,E3 ...

  5. JS 数组去重复值

    var arr1 = [90, 91, 92]; var arr2 = [80, 81]; var arr3 = [80, 71, 72, 73]; var arr = arr1.concat(50, ...

  6. MySql按周/月/日分组统计数据的方法

    知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case grou ...

  7. mysql中生产表格多列统计问题

    for Example: select date_format(date,'%Y-%m-%d') as day, count(case when xinghao='a' then 1 end) as  ...

  8. 【转】Mysql 根据时间戳按年月日分组统计

    create_time时间格式 SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY week ...

  9. mysql之group by进行分组统计

    格式: select 字段1,字段2 from 表名 where 条件 group by 字段 样例一: 1.需要每个市的对应数据 -- 计算 审批完成时间和提交审批时间天数(总时间差) 总数据量 行 ...

随机推荐

  1. Oracle存储过程、包、方法使用总结

    /** *@author:zhengwei *@date:2017-04-28 *@desc:存储过程用法总结 */ CREATE OR REPLACE PROCEDURE MYPROCEDURE(P ...

  2. html5 audio play()方法部分ios机不能播放声音

    前几天遇到了一个很奇葩的问题:执行audio.play方法,浏览器.安卓.部分ios可正常播放,部分ios不能播放部分声音,这就奇怪了. 我的第一反应是: 音频文件有问题  -- 写了一个domo验证 ...

  3. Maven服务器搭建

    Nexus服务器软件安装和配置 目前比较流行的使用nexus搭建maven私有服务器,其实很简单,它就是一个web系统,从官方下载的包默认内嵌了jetty容器,所以需要提前安装好JVM,并配置好环境变 ...

  4. jQuery知识点整合

    一.jQuery介绍 jQuery是一个函数库,一个js文件,页面用script标签引入js文件就可以使用 <script type="text/javascript" sr ...

  5. docker~大叔对术语的解释

    回到目录 接触和使用docker已经有1年多了,起初对概念本身理解的不是很好,或者说,没有找到一本比较好的书,在自己的研究下,对docker一些基本的概念有了自己的一些认识和看法,现在分享给正在学习d ...

  6. 修改tomcat编码方式

    打开server.xml <Connector URIEncoding="UTF-8" connectionTimeout="20000" port=&q ...

  7. 关于华为P9手机的解锁、刷Recovery、获取Root、安装Busybox,以及升级降级的全过程(和一些错误的解决方法)

    我有一部华为P9手机,型号EVA-TL00,属于移动定制机.用了半年多了,想给手机添加一些功能,发现有些功能必须Root之后才能用代码实现,所以动了Root的打算. 一.手机解锁.(不解锁则无法对手机 ...

  8. 如何将 Microsoft Bot Framework 机器人部署以及网页应用

    <Bot Framework>是微软开发的一款可让任何人制作自己的聊天机器人.该工具可以理解自然语言并对图片进行分析等,初期开放了 22 个可集成到应用的 API. 首先说到Bot大家的第 ...

  9. Go语言学习笔记(五)文件操作

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 文件读取 os.File 封装了文件相关操作 type File File代表一个打开的文件对象. func Cr ...

  10. maven相关的学习资料

    1, maven的settings配置文件详解: http://blog.csdn.net/jinshuaiwang/article/details/23686099 2,maven原理---翡青的博 ...