本文提及技巧只适用数据统计,OLAP场景,不建议用于业务sql。

 

分组top问题

知识点:巧用局部变量,实现Hive窗口分析函数功能row_number() over(partition by exam_id)

题目:如下表,记录每个学生的成绩,用sql求出每班前五名的学生id和成绩。

create table student(  id int(11) comment "学生id",  class int(3) comment "班级",  score int(3)  comment "成绩");

解答1:巧用临时变量

划重点:mysql的临时变量赋值顺序是:from --> select,select子句字段按从上到下顺序执行。

select   id,  class,  scorefrom (  select        id,         class ,        score,        if(@cur_class <> class, @seq:=0, null) temp_seq,        if(@cur_class=class and @last_score <> score,@seq:=@seq+1,@seq) as seq ,        @cur_class:=class,        @last_score:=score    from         student a ,(select @cur_class:=0,@seq:=0, @last_score:=0) t0    order by         class asc , score desc) t1 where t1.seq <= 5;

解答2:使用子查询

select   t1.id,  t1.class,  t1.scorefrom   student t1where   (select count(1) c from student t2 where t2.class = t1.class and t2.score >= t1.score ) <= 5

前后记录关联——求次日留存

题目:如下表,记录用户访问流水,求次日留存率。

create table visit_log(  userId int(20) comment "用户id",  visitDate datetime comment "访问时间");

思路:次日留存率 = 交集(当天访问用户 和 下一天访问用户)/ 当天访问用户数

解答:

select    date_format(visitDate, "%Y-%m-%d") as `日期`,    count(distinct if(date_format(user_next_date, "%Y-%m-%d")) = date_format(date_add(visitDate,interval 1 day), "%Y-%m-%d"),uid , null ))     / count(distinct uid ) as  `次日留存率`from (    select        visitDate,         uid ,        -- 查出当前记录用户,下一次访问日期        (select min(visitDate) from visit_log where date_add(date_format(a.visitDate , "%Y-%m-%d 00:00:00"),interval 1 day) and a.userId = userId )     from         visit_log a ) a group by     date_format(visitDate, "%Y-%m-%d");

mysql 统计_mysql数据统计级别技巧相关推荐

  1. 移动互联网数据分析 移动客户端流量统计 移动客户端数据统计(一)

    移动互联网数据分析 移动客户端流量统计 移动客户端数据统计 原创文章,转载请注明原地址 http://blog.csdn.net/stevenprime 在这个公司两年多了,期间做了移动客户端数据分析 ...

  2. MySql下大数据量级别(1000万+)优化查询和操作方法

    MySql下大数据量级别(1000万+)优化查询和操作方法 一.[原则一]: insert into tb (...) values(...),(...)...; 要比 insert into tb ...

  3. 用mysql触发器做数据统计

    一 .具体实现 文件表: create table if not exists `file` ( `Name` varchar(255) NOT NULL, `Bucket` varchar(255) ...

  4. python怎么分组统计_python 数据统计,分组的一些小技巧

    (点击上方公众号,可快速关注)html 来源:KillerManA前端 连接:http://www.jianshu.com/p/e792eea5056cjava 最近在用python作数据统计,这里总 ...

  5. mysql多对一数据统计

    需求:现在我们现在有一个托运单表和整车表,托运单表的字段有送货类型 1自提:还 2配送有一个托运单包含多件货物. 一辆整车运输的时候包含多张托运单,一个托运单也可能多辆车送.现在需要分页显示每一辆整车 ...

  6. mysql 计算成功率_mysql数据统计技巧备忘录

    mysql 作为常用数据库,操作贼六是必须的,对于数字操作相关的东西,那是相当方便,本节就来拎几个统计案例出来供参考! order订单表,样例如下: CREATE TABLE`t_order` ( ` ...

  7. mysql 性能统计_MySql 的统计查询性能问题

    由于数据量非常大(单表:四五百万条数据),需要对这种类型的表进行统计查询,并插入到对应的Maxstatistics(里面是Id.Value.Time) MinStatistics 等表. 这个表的结构 ...

  8. mysql多字段数据统计_超详细的mysql元数据sql统计--information_schema

    概述 information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库.其中 performance_schema 用于性能分析,而 in ...

  9. mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解

    概述 MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数.并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引 ...

最新文章

  1. AI回溯过去解决复杂任务 |《自然》论文
  2. 表的插入、更新、删除、合并操作_18_清空表中记录
  3. TinyUI组件开发示例
  4. 哪个计算机无法做到双屏显示,怎么启用双屏显示设置【图文介绍】
  5. word中的图片设定成统一文字环绕格式
  6. php打包mysql_PHP封装MySQL的单例
  7. ubuntu 16.04下git的安装与使用
  8. delphi2010中FastReport的安装方法
  9. (九)java多线程之CyclicBarrier
  10. vaniglia 源码学习(一)
  11. OneNET麒麟座应用开发之五:获取加速度传感器ADXL345数据
  12. QT运行时加载UI文件
  13. Android 笔记 json GSON,Android中使用Gson解析JSON数据
  14. aspose.pdf-17.8暴力破解,附破解过程和使用代码。仅供参考,不可用于商业用途
  15. 使用 dva 如何配置异步加载路由组件
  16. missing separator 解决方法
  17. java实时获取android网速_Android实现网速实时监测工具类
  18. 【Faster R-CNN论文精度系列】从Faster R-CNN源码中,我们“学习”到了什么?
  19. 九大微博传播分析工具
  20. 8:操作模式1-boot mode

热门文章

  1. android多屏幕适配资源生成,android – 多屏幕适配相关
  2. python修改文件内容最后一行_关于python:如何修改文件的最后一行?
  3. hexo博客生成博文,当生成的文章数量超过1000时,耗尽所有内存资源后出现out of memory
  4. CountDownLatch、CyclicBarrier、Semaphore的区别,你知道吗?
  5. 深入理解Java虚拟机-Java内存区域透彻分析
  6. 蓝桥杯-前缀表达式(java)
  7. php url怎么加前缀,php – 在Laravel 5中为现有URL添加前缀
  8. java xpath 命名空间_【转】玩转 XPath 和缺省命名空间(Default Namespaces)
  9. 错误The type XXX is deprecated解决
  10. 分析JDK中的Runtime的单例设计模式以及使用小例子