zoukankan      html  css  js  c++  java
  • 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很复杂会导致超时!

      不说了,都是泪,以上。

  • 相关阅读:
    自定义Response
    并发编程之进程
    并发编程知识储备
    正则表达式和re模块
    Scrapy框架
    http协议和Chrome抓包工具
    requests库
    Beautifulsoup
    xpath
    Mysql一些操作
  • 原文地址:https://www.cnblogs.com/sunshine-wy/p/12844682.html
Copyright © 2011-2022 走看看