• 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很复杂会导致超时!

      不说了,都是泪,以上。

  • 相关阅读:
    Q群
    shell脚本写host类型executable
    Oracle EBS 基于Host(主机文件)并发程序的开发
    ORALCE存储之ROWID
    HOW TO LINK THE TRANSACTION_SOURCE_ID TO TRANSACTION_SOURCE_TYPE_ID
    查找Form文件
    ORACLE column_type_id与实际type的对应关系
    OAF jar包引用产生错误
    计算Trial Balance的新方法(转)
    如何访问到XtreemHost上的站点?
  • 原文地址:https://www.cnblogs.com/sunshine-wy/p/12844682.html
Copyright © 2020-2023  润新知