sql  统计  优化

分三条sql查出三种不同的状态的记录数(总记录,未支付,已支付)
group by对记录数进行分日期进行统计    
CASE WHEM 整合成一条sql

case when 条件查询

CASE sex  WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END
CASE WHEN sex = '1' THEN '男'  WHEN sex = '2' THEN '女'  ELSE '其他' END
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类' WHEN col_1 IN ('a')  THEN '第二类'  ELSE '其他' END

case when 总结

一是在显示查询结果时可以灵活的组织格式
二是有效避免了多次对同一个表或几个表的访问

case when 实例

--人口数量统计
SELECT  SUM(population),
CASE country  WHEN '中国' THEN '亚洲' WHEN '印度' THEN '亚洲' WHEN '日本' THEN '亚洲' WHEN '美国' THEN '北美洲' WHEN '加拿大'  THEN '北美洲' WHEN '墨西哥'  THEN '北美洲'
ELSE '其他' END
FROM    Table_A
GROUP BY
CASE  country WHEN '中国' THEN '亚洲' WHEN '印度' THEN '亚洲'WHEN '日本' THEN '亚洲' WHEN '美国' THEN '北美洲' WHEN '加拿大'   THEN '北美洲' WHEN '墨西哥'   THEN '北美洲'
ELSE '其他' END; -- 工资等级分类
SELECT
CASE  WHEN salary <= 500 THEN '1' WHEN salary > 500 AND salary <= 600  THEN '2' WHEN salary > 600 AND salary <= 800  THEN '3' WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END salary_class, -- 别名命名
COUNT(*)  FROM    Table_A
GROUP BY
CASE  WHEN salary <= 500 THEN '1' WHEN salary > 500 AND salary <= 600  THEN '2' WHEN salary > 600 AND salary <= 800  THEN '3' WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END; -- case when  sum
SELECT country,
SUM( CASE WHEN sex = '1' THEN  population ELSE 0 END),  --男性人口
SUM( CASE WHEN sex = '2' THEN  population ELSE 0 END)   --女性人口
FROM  Table_A  GROUP BY country; 

https://www.cnblogs.com/aipan/p/7770611.html  case when  教程

group  按条件分组求和

where  子句的作用是在对查询结果进行分组前/where 条件中不能包含聚组函数
having 子句的作用是筛选满足条件的组/having 条件经常包含聚组函数

select 类别, sum(数量) as 数量之和  from A group  by 类别
select 类别, sum(数量) AS 数量之和  from A group  by 类别 order by sum(数量)  desc
select 类别, sum(数量) as 数量之和  from A  group by 类别 having sum(数量) > 18select 类别, sum(数量) as 数量之和, 摘要 from A group by 类别 order by 类别 desc
select 类别, 摘要, sum(数量) as 数量之和 from A group by all 类别, 摘要
select 类别, 摘要, sum(数量) AS 数量之和 from A group by 类别, 摘要select 类别, sum(数量) as 数量之和  from A  where 数量 &gt;8 group by 类别 having SUM(数量) &gt; 10

常见sql 聚合函数

count() --count(*)的区别
sum()
max()
min()
avg()

count(列)count(1)和count(*)区别

count(1)和count(*)并效率上没有区别
count(列)可以用到索引,而count(*)不行
如果索引列是非空的,那么count(*)也可用到索引,此时一样快
count(列)越往后。我们的执行效率越慢。count(*)的算法与列偏移量无关,此时count(*)快

https://www.cnblogs.com/Caucasian/p/7041061.html  数据优化原理

sql 执行计划

执行计划是指sql的一个执行顺序和耗费的资源,耗费的资源越少越快,如果在plsql中,使用F8可以查看sql的执行计划

sql 实例

SELECT COUNT( CASE WHEN `payment_type` =1 THEN 1 ELSE NULL END ) AS `连连`, COUNT( CASE WHEN `payment_type` =2 THEN 1 ELSE NULL END ) AS `支付宝`, COUNT( CASE WHEN `payment_type` =3 THEN 1 ELSE NULL END ) AS `手工`
FROM `receive`selectnvl((select sum(N_FZ) from t_fkhg_jfdj where n_yggh = t.n_yggh and D_CLRQ >= TRUNC(SYSDATE, 'MM') and D_CLRQ <= last_day(SYSDATE)),0) as 本月,nvl((select sum(N_FZ) from t_fkhg_jfdj where n_yggh = t.n_yggh and to_char(D_CLRQ,'yyyy') = to_char(sysdate,'yyyy')),0) as 本年,nvl((select sum(N_FZ) from t_fkhg_jfdj where n_yggh = t.n_yggh and to_char(D_CLRQ,'yyyy') = to_char(ADD_MONTHS(trunc(sysdate,'yyyy') ,-12),'yyyy')),0) as 去年
from t_fkhg_jfdj t --sum()  求和
select sum(case when D_CLRQ >= TRUNC(SYSDATE, 'MM') and D_CLRQ <= last_day(SYSDATE) then N_FZ else 0 end ) as 本月,
sum(case when to_char(D_CLRQ,'yyyy') = to_char(sysdate,'yyyy') then N_FZ else 0 end ) as 本年,
sum(case when to_char(D_CLRQ,'yyyy') = to_char(ADD_MONTHS(trunc(sysdate,'yyyy') ,-12),'yyyy') then N_FZ else 0 end ) as 去年
from t_fkhg_jfdj

【sql 统计实例】统计本月,本年,去年相关推荐

  1. oracle取本月最后一天是星期几_oracle SQL语句取本周本月本年的数据

    --国内从周一到周日 国外是周日到周六 select to_char(sysdate-1,'D') from dual;--取国内的星期几 去掉减一取国外的星期 --取本周时间内的数据 select ...

  2. Oracle+sql+取年度,oracle SQL语句取本周本月本年的数据

    --国内从周一到周日 国外是周日到周六 select to_char(sysdate-1,'D') from dual;--取国内的星期几 去掉减一取国外的星期 --取本周时间内的数据 select ...

  3. mysql本周 下周下月_sql 统计本周,本月,下周,下月sql语句

    //本款sql 语句可以查询,本周,本月,下周,下月生日的相关数据 sql 统计本周,本月,下周,下月sql语句 /* 表结构 Student(S#,Sname,Sage,Ssex) --S# 学生编 ...

  4. mysql+下周,sql统计本周,本月,下周,下月sql语句

    //本款sql 语句可以查询,本周,本月,下周,下月生日的相关数据 sql 统计本周,本月,下周,下月sql语句 /* 表结构 Student(S#,Sname,Sage,Ssex) --S# 学生编 ...

  5. sql中如何统计各种零件的总数量_[Python]提取数据库中数据, 用人货场的分析方法, 对电商双十一促销活动结果数据进行复盘分析...

    背景 某电商公司最近举行了一场促销活动,该案例是对此次活动的一次复盘和分析.所需要用到的工具有Python + SQL. python会用到的库有: sqlalchemy pandas sklearn ...

  6. 使用数据库维护计划SQL Server更新统计信息

    This article explores SQL Server Update Statistics using the database maintenance plan. 本文探索使用数据库维护计 ...

  7. mysql统计本周、本月、近一年数据并分组

    最近碰到一个需求是统计某张表的数据,统计时间维度分别为当天.本周.本月.近三月.近一年,其中当天的统计单位为时(h).本周和本月统计单位为天(d).近三月和近一年统计单位为月(m),如果当前时间单位没 ...

  8. 浅谈SQL Server中统计对于查询的影响

    简介 SQL Server查询分析器是基于开销的.通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引.而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值 ...

  9. 【作业】组合数据类型练习,英文词频统计实例

    1.列表实例:由字符串创建一个作业评分列表,做增删改查询统计遍历操作.例如,查询第一个3分的下标,统计1分的同学有多少个,3分的同学有多少个等. 1 score = list('012332211') ...

  10. SQL Server 查找统计信息的采样时间与采样比例

    SQL Server 查找统计信息的采样时间与采样比例 原文:SQL Server 查找统计信息的采样时间与采样比例 有时候我们会遇到,由于统计信息不准确导致优化器生成了一个错误的执行计划(或者这样表 ...

最新文章

  1. 微软职位内部推荐-Sr. Dev Lead
  2. Contiki OS 开发快速入门
  3. SAP打补丁时需要注意的地方
  4. find与grep命令简介及正则表达式(转)
  5. Nginx Install 记录
  6. asp.net 获取客户端mac_Mac软件安利(人人影视 for Mac 3.1.2)
  7. Oracle Cluster verification utility failed 的解决方法
  8. 基于CNN-LSTM的手写数字识别与应用实现(附tensorflow代码讲解)
  9. 基于内容的垃圾邮件过滤
  10. 最值得爸爸妈妈学习的儿童教育书籍推荐
  11. 怎么用微信打开wifi连接到服务器,微信一键连wifi在哪里 微信一键连wifi怎么使用...
  12. 前端总结之html:窗口大小改变页面
  13. 华为服务器管理口在哪个位置,华为服务器默认管理口地址吗
  14. 秋天,小溪潺潺,古老的树上黄叶灿灿,阳光像一个魔法师,在树叶间流动,远山,云天,充满秋阳的光线。以此景观做一首诗...
  15. WorldEdit 指令大全 开发记录
  16. 从零开始Android游戏编程(第二版) 目录
  17. JPA之EntityManager踩坑笔记:更改PersistenceContext
  18. Ubuntu 下Android开发环境搭建
  19. AV3680A天馈线测试仪使用方式
  20. 第一篇 树莓派刷机和系统基础配置

热门文章

  1. MySQL探秘(八):InnoDB的事务
  2. 在GitHub,他们是怎么玩的? (转)
  3. FBI树——递归练习
  4. django页面跳转问题
  5. Android应用开发-小巫CSDN博客客户端之显示博文详细内容
  6. XP系统进不了服务器,xp系统电脑打不开网页的图文技巧
  7. 代驾APP_第一章_项目环境搭建_第一节
  8. 不做不明真相的开发者 之驱动与中断
  9. 如何在windows下安装ray(install Ray under windows)
  10. 利用金山快盘和TortoiseSVN搭建自己的svn服务器