在同一个sql语句中,统计不同条件的Count数量
2017-08-04 10:16
1236 查看
前几天帮同事优化了个SQL,原写法使用多个子查询这里不再重现了,大家都遇到过这样一种情况,在项目后期的维护中,
修改别人的SQL代码,超过30行的语句,多层子查询,读起来很坑,时间久的项目伴随着人员的流通,你可能就不知道原作者写这一堆的SQL是干什么用的,
当然碰到部分有注释习惯的朋友还是好点的,过长的SQL后期维护性与可读性很差,并且一般情况下性能也经不起推敲。
对于长的,复杂的SQL可以有很多种处理方式
1、沉到业务中取处理,拆分SQL
2、抽取公用统计属性,建立冗余表
上边简单列举这两种,不再展开,这里关注上边的问题处理
方案一
select id,
count(case when 属性 in (1,2) then 1 else 0 end) as sum1,
count(case when 属性 in (3) then 1 else 0 end) as sum2,
sum(case when 属性 in (4,5) then 1 else 0 end) as sum3
from 表名
group by id
方案二
SELECT
count( * ) AS num,
count(if(字段=1,true,null)) AS sum1,
count(if字段=2,true,null)) AS sum2
FROM 表名
WHERE 其他条件
还有其他实现方式,这里不再展开,有兴趣的朋友一起讨论呀( ⊙ o ⊙ )!
修改别人的SQL代码,超过30行的语句,多层子查询,读起来很坑,时间久的项目伴随着人员的流通,你可能就不知道原作者写这一堆的SQL是干什么用的,
当然碰到部分有注释习惯的朋友还是好点的,过长的SQL后期维护性与可读性很差,并且一般情况下性能也经不起推敲。
对于长的,复杂的SQL可以有很多种处理方式
1、沉到业务中取处理,拆分SQL
2、抽取公用统计属性,建立冗余表
上边简单列举这两种,不再展开,这里关注上边的问题处理
方案一
select id,
count(case when 属性 in (1,2) then 1 else 0 end) as sum1,
count(case when 属性 in (3) then 1 else 0 end) as sum2,
sum(case when 属性 in (4,5) then 1 else 0 end) as sum3
from 表名
group by id
方案二
SELECT
count( * ) AS num,
count(if(字段=1,true,null)) AS sum1,
count(if字段=2,true,null)) AS sum2
FROM 表名
WHERE 其他条件
还有其他实现方式,这里不再展开,有兴趣的朋友一起讨论呀( ⊙ o ⊙ )!
相关文章推荐
- 在同一个sql语句中如何写不同条件的count数量 (转)
- 在同一个sql语句中写不同条件的count数量,和查询半年的数据
- 在同一个sql语句中如何写不同条件的count数量
- 转>>在同一个sql语句中如何写不同条件的count数量
- 数据库关于同一张表不同条件取出数量的横向添加sql语句
- [置顶] 数据库统计不同字段数量时的sql语句
- SQL一次性查询一个字段不同条件下的统计结果
- sql利用在一条语句中count出不同的条件的值
- SQL一次性查询一个字段不同条件下的统计结果
- 使用SQL查询语句时,数组动态赋值SQL IN ()作为条件条件一个
- 用到 count; group by ; order by ;having 的一个SQL语句
- 如果在一个SQL语句中有两个来自不同表的字段,有相同的字段名怎么办?
- 【Vegas原创】用SQL语句统计一个表有多少列
- 用一条SQL语句查询一张表得到不同条件的多个结果
- 统计某一字段等于不同值的个数的sql语句(分享)
- sql语句 一个表 用户产生两条不同类型的数据 拼接成一条数据
- SQL高级语句-FOREIGN KEY 约束,确保同一个表或者不同表之间的引用完整性
- sql分组统计查询 count带条件
- 用一个sql语句更新多行,且有多个条件
- 一个 Sql语句优化的问题- STATISTICS 统计信息