sql 不同where下的统计

简介: sql 不同where下的统计

我们做项目难免遇到统计,比如统计不同状态下订单的总数。表的主体都是订单表,只是后面where不同,如果我要一次性返回不同条件下的总数,应该怎么写sql呢?


来看我最开始的写法:(以下伪代码)


select (查询结果集and条件1) count1,(查询结果集and条件2) count2,(查询结果集and条件3) count3


如果是单表查询还好,括号内的sql不会很长,但如果是那种需要关联很多结果集的查询,三个括号加起来的代码就很臃肿了,而且重复的地方太多。


来看最后优化后的写法:


select ( case when 条件1 then 1 else null end )count1, ( case when 条件2 then 1 else null end )count2, ( case when 条件3 then 1 else null end )count3


from 查询结果集


这样就做到了代码简化,第一种其实是查询多次拼接在一起,第二种则不然,只查了一次。


关于为啥突然写起这个,唔,只想说linq to sql有点难用,费劲,在以EF为ORM的项目中,linq to sql的查询方式很常见,但是这个东西往往容易和linq查询分不开,或者极其容易混写,如:


var res=( from a in t  ).Where(....) ;


要仔细看了,在()后Where和在()里面where是不一样的,在括号里面写where是linq to sql,会转换成sql代码执行,但是括号外面的Where则是linq查询,说简单点就是已经执行过sql,然后在内存上筛选数据。这样的性能是比不上前者的,后者会返回大量数据加载到内存,如果你的Where很复杂会导致超时!


不说了,都是泪,以上。

PS:楼主邮箱 tccwpl@163.com

目录
相关文章
|
5月前
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day06】电商购买金额统计实战
每天一道大厂SQL题【Day06】电商购买金额统计实战
40 0
|
5月前
|
SQL 大数据
每天一道大厂SQL题【Day03】订单量统计
每天一道大厂SQL题【Day03】订单量统计
28 0
|
5月前
|
SQL 存储 大数据
每天一道大厂SQL题【Day02】电商场景TopK统计
每天一道大厂SQL题【Day02】电商场景TopK统计
38 1
|
5月前
|
SQL 数据库
SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY
SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下:
58 1
|
5月前
|
SQL 大数据 API
每天一道大厂SQL题【Day08】服务日志SQL统计
每天一道大厂SQL题【Day08】服务日志SQL统计
42 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
34 0
|
1月前
|
SQL 关系型数据库 MySQL
mysql一条sql查询出多个统计结果
mysql一条sql查询出多个统计结果
15 0
|
2月前
|
SQL
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
41 0
|
4月前
|
SQL
leetcode-SQL-580. 统计各专业学生人数
leetcode-SQL-580. 统计各专业学生人数
28 0
|
4月前
|
SQL 流计算
在Flink SQL中,如果在使用表别名后,WHERE子句中使用了别名,可能会出现找不到表的问题
【1月更文挑战第4天】【1月更文挑战第18篇】在Flink SQL中,如果在使用表别名后,WHERE子句中使用了别名,可能会出现找不到表的问题
32 1