最近在给某网站的后台添加一系列的统计功能,遇到很多需要按条件计数的情况。尝试了几种方法,下面简要记录,供大家参考。 问题描述 为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景。...优缺点 缺点是显而易见的,由于使用了条件表达式作为分组依据,它只能做二元的划分,对于要分成多类进行统计的情况不能够胜任。...方法2:使用嵌套的SELECT 使用嵌套的SELECT也可以达到目的,在每个SELECT子句中统计一个条件下的数据,然后用一个主SELECT把这些统计数据整合起来。...先使用CASE WHEN,当满足条件时,将字段值设置为 1, 不满足条件时,将字段值设置为NULL,接着COUNT函数仅对非NULL字段进行计数,于是,问题解决。...总结 对于确定分类的按条件计数,可以尽量不用GROUP BY,从而避免排序动作,加速Query的执行。
一.横向拆分 create table 新表的名称 select * from 被拆分的表 order by id limit int1,int2 int1为其实位置,int2为几条 注意:这样拆分后主键会失效手动让其主键生效即可所有要执行...alter table 新表的名称 modify 主键字段 int primary key auto_increment 二.纵向拆分 create table 新表的名称 select 需保留的字段...from 被拆分的表 拆分后原表都要保存 主要是把经常查的数据放在一个表里,不经常查的数据不做处理
业务场景 MySQL按小时分组统计日志记录数量。...最近需要统计一些日志流水,统计出打卡的高峰期,所以需要对日志流水按小时进行分组统计,统计出每半小时或者每小时内的打卡次数 按小时统计 这里使用DATE_FORMAT函数,然后再根据createTime进行分组...: 基于此,还可以继续拓展,按每N分钟、每分钟、每天进行分组统计 每N分钟统计 前面是按照半小时(30分钟),依此类推,可以按n分钟进行分组统计,统计n分钟内的打卡次数,比如统计每10分钟内的打卡次数...: 按日期统计 按照日期进行分组,统计每天的打卡次数: SELECT device_id, DATE( create_time ) AS createTime, count(*) AS...t_user_atten_record WHERE com_id = 1111699 GROUP BY device_id, createTime ORDER BY device_id, createTime; 按天分组统计
计数器 如果应用在表中保存计数器,则在更新计数器时可能碰到并发问题。计数器表在Web应用中很常见。可以用这种表缓存一个用户的朋友数、文件下载次数等。...创建一张独立的表存储计数器通常是个好主意,这样可使计数器表小且快。使用独立的表可以帮助避免查询缓存失效,并且可以使用本节展示的一些更高级的技巧。...应该让事情变得尽可能简单,假设有一个计数器表,只有行数据,记录网站的点击次数: CREATE TABLE hit_counter ( cnt INT UNSIGNED NOT NULL )...这样做需要对计数器表进行如下修改: CREATE TABLE hit_counter ( slot TINYINT UNSIGNED NOT NULL PRIMARY KEY, cnt INT UNSIGNED...SET c.cnt = IF(c.slot = x.mslot, x.cnt, 0), c.slot = IF(c.slot = x.mslot, 0, c.slot); 内容参考自《高性能MySQL
大家好,本节主要介绍,通过VBA程序,将单个工作簿中的多个工作表,按表拆分成多个独立工作簿。...效 果 演 示 一个工作簿中有多个工作表,将每个工作表拆分成独立的工作簿,生成的工作簿名称为原工作表名称,保存至原文件路径下,演示效果如下: V B A 代 码 思路是通过for each循环,将该工作簿中的每个表格对象赋值给...保存至原工作簿的路径下,工作簿的名称为原工作表的名称,另存完毕后关闭,最后msgbox弹窗提示完成。 为了提高代码效率,关闭屏幕更新。...代码如下: Sub 拆分工作表() '定义变量并赋值 Dim Sht As Worksheet Dim MyBook As Workbook Set MyBook = ThisWorkbook '关闭屏幕更新...Application.ScreenUpdating = False '通过for each循环工作表变量 For Each Sht In MyBook.Sheets Sht.Copy
---- Mysql 根据时间戳按年月日分组统计 -----------------来自小马哥的故事 ---- create_time时间格式 SELECT DATE_FORMAT
计算分组的组数 SELECT count(1) from (select COUNT(1) as sum FROM TM_APP_MAIN A INNER JOIN TM_APP_PRIM_APPLICANT_INFO...= 9982 group by C.APP_NO,C.LIST_LEVEL having (select count(*) from TM_BLACK_LIST) >0) ali; 根据某个字段去重计数
问题描述 测试表如下: 上面的日期是精确到日的,我现在要按照年月来将上表的数据分组统计,并求出number的平均值。...= '001' GROUP BY createTime ORDER BY createTime 运行结果 总结 成功解决了我的大问题,因为这个问题纠结了好久,曾经还考虑过要不要在后端给集合分组和建立月数据表
3、order by 优化 MySQL的排序,有两种方式: Using filesort : 通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sortbuffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫...如果说要大幅度提升InnoDB表的count效率,主要的优化思路: 自己计数,可以借助于redis这样非关系型的数据库进行,但是如果是带条件的count又比较麻烦了。...服务层拿到主键后,直接按行进行累加(主键不可能为null) count(字 段) 没有not null 约束 : InnoDB 引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为null...,不为null,计数累加。...有not null 约束:InnoDB 引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,直接按行进行累加。 count(数 字) InnoDB 引擎遍历整张表,但不取值。
p_id int(10) primary key auto_increment, p_name varchar(10), p_code varchar(10) )comment '商品表'...',4), (9,'name9',2), (10,'name10',2), (11,'name11',3), (12,'name12',3); 第二步:查询 需求:按照p_code字段对product表进行分组并取每组的前两条数据
按天统计 1、创建基础表 CREATE TABLE num (i INT); INSERT INTO num (i) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8)
MySQL按日期分组并统计截止当前时间的总数 建表语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- -----------------------...:01:12', 4); INSERT INTO `t_reg` VALUES (7, '2019-05-03 05:08:09', 11); SET FOREIGN_KEY_CHECKS = 1; 表结构如下所示...:REG_COUNT 表示当天新增的用户数 现在的需求是这样的:按每天分组,查询当天新增的用户总数和截止到当前时间新增的用户总数,结果如下: SQL语句如下: SELECT reg_time
- 1 day) `date` , 0 as `sum` from (SELECT @cdate :=date_add(CURDATE(),interval + 1 day) from 表名...1 day) `date` , 0 as `sum` from (SELECT @cdate :=date_add(CURDATE(),interval + 1 day) from 表名
对上次的文章进行优化 ==========代码如下===== Sub 筛选拆分() Dim d As Object, sht As Worksheet, ...
MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组。 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。...> set names utf8; mysql> SELECT * FROM employee_tbl; +----+--------+---------------------+--------+ |...2 | +----+--------+---------------------+--------+ 6 rows in set (0.00 sec) 接下来我们使用 GROUP BY 语句 将数据表按名字进行分组...| | 小王 | 2 | +--------+----------+ 3 rows in set (0.01 sec) 使用 WITH ROLLUP WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计...例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数: mysql> SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP
场景:mysql统计一个数据库里所有表的数据量,最近在做统计想查找一个数据库里基本所有的表数据量,数据量少的通过select count再加起来也是可以的,不过表的数据有点多,不可能一个一个地查 记得在...Navicat里,选择一个数据量,点击表,如图: 是可以看到所有表具体的数据行的 然后可以通过sql实现?...在mysql里是可以查询information_schema.tables这张表的 SELECT table_rows,table_name FROM information_schema.tables...大概意思是对于MyISAM才是正确的统计数据,但是对于InnoDB引擎的,可能与实际值相差 40% 到 50%,所以只是一个大概的统计 所以针对这种情况,要更改存储引擎,肯定是不太合适,因为InnoDB...是默认的存储引擎,能支持事务外健,并发情况性能也比较好 所以,根据网上的做法,重新analyze 对应表,在mysql8.0版本是不管用的,发现查询数据还是不对,估计是mysql版本太高,mysql5版本没验证过
一、按天分片 指定一个时间周期,将数据写入一个数据节点中,例如:第1-10天的数据,写入到第一个数据节点中,第2-20天的数据写入到第二个节点中,第3-30天的数据节点写入到第三个数据节点中。 ...说明1:按天分片要配置一个起始日期,一个结束日期,一个分片间隔时间三个参数 说明2:按天分片允许当前时间超出配置的开始时间和结束时间,超出时间范围仍然会按照分片间隔时间,继续在多个数据节点之间切换的...对应的是dbhost2即192.168.3.91分片 说明6:dn6对应的是dbhost3即192.168.3.92分片 五、配置server.xml 说明1:在之前的文章中已经将tb_logs表添加到...六、按(天)日期分片测试 首先重启Mycat 登录Mycat 查看逻辑库和逻辑表 这里的tb_day只是逻辑库,而在MySQL中还并没有tb_day这个表,需要在Mycat中创建 create...按(天)日期分片是水平分库分表的一种方式。
(import) 2.1分组 分组:将所标记的某个相同字段进行归类,比如员工信息表的职位分组,或者按照性别进行分组等。...count(字段名),按照条件对字段中的数据进行计数。 例子: 1.以性别为例, 进行分组, 统计一下男生和女生的人数是多少个。...使用外键的原因: 1.减少占用的内存空间 2.只需要修改主表的数据,从表的数据也会相应的跟着修改 3.1一对多 一对多指一个主表中的数据和从表中的数据是一对多的关系,如下例,一个部门可以有多个员工。...| 前台部 | | xiaoguo | 小卖部 | +---------+-----------+ 6 rows in set (0.00 sec) 3.2多对多 多对多指当一个主表有多个从表时...,从表之间的每个数据之间的关系就是多对多,如下图,一个boy可以和多个girl约会,一个girl也可以和多个boy约会。
业务需求 最近要在系统中加个统计功能,要求是按指定日期范围里按天分组统计数据量,并且要能够查看该时间段内每天的数据量。...解决思路 直接按数据表日期字段group by统计,发现如果某天没数据,该日期是不出现的,这不太符合业务需求。...百度一番发现方案大致有两种:一是新建日期列表,把未来10年的日期放进去,然后再跟统计表作连接查询;二是用程序代码在SQL逻辑中union多个连续日期查询。都比较繁琐。...as date_count FROM(SELECT @cdate: = date_add(CURDATE(), interval + 1 day) from t_table1) t1 2、业务统计查询也按上述日期查询给统计日期和数量设置别名
我只在Mysql中做了测试,其它数据库各位读者如果有兴趣可以自己试试。 1. 创建测试数据 首先新建三张表:user、company、school。...三个表结构很简单,数据类型什么的我就不放出来了,把表数据列在下面。...user表(InnoDB): id name age 1 小明 18 2 小李 19 3 小张 20 company表(MyISAM): id name age 1 小明的公司 小明的公司地址 2 小李的公司...表中第一条数据中“小明的公司地址”被改成了“小明的第二家公司地址”,而其它两个表的数据没有发生任何变化。...总结 在平时的工作中,如果涉及到数据库事务操作,一定要对库和表的性质特性了解清楚,以防一些不支持事务的库和表,影响了事务操作的原子性。 你的点赞关注是对我最大的支持,求一键三连:分享朋友圈、点赞、在看
领取专属 10元无门槛券
手把手带您无忧上云