请教大神一条sql语句的优化

问题描述

请教大神一条sql语句的优化

表名pm,以temp分组,count两个信息,一个是全部个数,另一个是status为1
id temp status
1 1 0
2 1 1
3 2 0
4 2 1
5 2 1
select total.temp ,used.c1,total.c2
from (select temp,count(1) c1 from pm group by temp ) total
left join (select temp,count(1) c2 from pm where status=‘1’ group by temp ) used
on total.temp=used.temp
求教各位大神该怎么优化?

解决方案

status 为1或者为0 ~~ 那么直接count(status) 不就得到了呀~~?

select temp,count(1),count(status) from pm group by temp;

如果status还有其他值

select temp,count(1),count(1-sign(status-1)*sign(status-1)) from pm group bu temp;

我感觉计算 运算 应该不会太耗时间吧~~ 呵呵!!
1-sign(status-1)*sign(status-1) 这个是 如果不为1 那么sign-1 一定不是0 不是0的平凡 显然是正的1 所以 1-1 显然就是0 了~~ 最终累计的就是status 为1的了~~

解决方案二:

   select
        temp,
        count(case when status =‘1’then status end)  used ,
        count(case when status !=‘1’then status end)  total
   from pm
   group by temp ;

就可以了

时间: 2024-07-28 16:45:42

请教大神一条sql语句的优化的相关文章

请教大神一条编写wpf程序时关于xaml的问题

问题描述 请教大神一条编写wpf程序时关于xaml的问题 为何会出现这样的错误?怎么解决? 解决方案 解决方案二: 就算是你可以不用了解他们的一个运行原理,但是最起码你得清楚命名之间的一个一一对应的关系吧 解决方案三: 应该放在 Window.Resource 节点中.可以作为整个window的资源.

sql server-求助:sqlserver一条sql语句的优化 是否需要索引 建立什么样的索引合适

问题描述 求助:sqlserver一条sql语句的优化 是否需要索引 建立什么样的索引合适 1C select COUNT(*) total from (select distinct(device_token) from MDM_POLICY_UPDATE where len(device_token)=64 and SW='crmi_poly') a 解决方案 我觉得直接可以用count(device_token) 然后直接groupby device个人感觉最拖后腿的应该是len()这个函

[20151209]一条sql语句的优化(续).txt

[20151209]一条sql语句的优化(续).txt http://blog.itpub.net/267265/viewspace-1852195/ --上次提到其中1条sql语句: 1.环境: SYSTEM@192.168.99.105:1521/dbcn> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------

[20150715]一条sql语句的优化.txt

[20150715]一条sql语句的优化.txt --生产系统发现一条语句. update presc_check t set t.diagnosis=replace(t.diagnosis,',慢性病drugs','') --第1眼看到的感觉真的很想骂人,什么能没有where条件呢? --我把这个表拷贝过来.这个表占用1G多1点,在测试环境执行看看: -- copy from system/xxxx@ip:1521/tyt create presc_check using select * f

[20140210]一条sql语句的优化(11g).txt

  [20140210]一条sql语句的优化(11g).txt 今天下午看生产系统数据库,无意中发现一个错误,同时优化也有点小问题,写一个测试脚本. 1.建立测试环境: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 -

[20130319]一条sql语句的优化.txt

[20130319]一条sql语句的优化.txt 生产系统,遇到这样一条语句:SELECT MAX (LENGTH (pe_id)) FROM pe_master_index WHERE SUBSTR (pe_id, 1, 2) = 'TJ'; --真不知道开发人员如何想的,写出这样的语句.字段pe_id是主键.--数据库版本 SQL> select * from v$version where rownum BANNER                                     

[20131025]一条sql语句的优化.txt

[20131025]一条sql语句的优化.txt 最近在优化一条sql语句,做一个测试例子测试看看.遇到一些问题记录一下: 1.建立环境: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Productio

分享几条sql语句命令优化技巧

1.应用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数:通过 搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担:能够分 开的操作尽量分开处理,提高每次的响应速度:在数据窗口使用SQL时,尽量把使 用的索引放在选择的首列:算法的结构尽量简单:在查询时,不要过多地使用通配 符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1:在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL

[20120319]一条sql语句的优化.txt

前天检查数据库,发现一天sql语句执行如下:SELECT MAX (undrug_code)   FROM undrug_info  WHERE SUBSTR (undrug_code, 1, 1) = 'F'; undrug_code是表undrug_info的主键.开始看见这个语句,感觉这样写不好,我想像的执行计划,全扫描索引,然后sort aggregate,找到最大值. 不如这样写:SELECT MAX (undrug_code)   FROM undrug_info  WHERE un