怎么写出下面这个结果的高效SQL语句?
有如下表及其数据记录:
姓名 里程 结果
张三 1 合格
张三 3 合格
张三 2 不合格
张三 1.5 合格
张三 2 不合格
希望输出结果:
姓名 里程合计 合格数 不合格数
张三 7.5 3 2
我目前的sql写法如下,但我认为这种方法太低效,有没高效的方法可实现上面的输出效果??谢谢
select 姓名,里程合计,合格数,不合格数 from(
select 姓名,sum(里程) as 里程合计 from tab group by 姓名) as a
full join
(select 姓名,count(结果) as 合格数 from tab where 结果='合格' group by 姓名) as b on a.姓名=b.姓名
full join
(select 姓名,count(结果) as 不合格数 from tab where 结果='不合格' group by 姓名) as c on a.姓名=c.姓名
姓名 里程 结果
张三 1 合格
张三 3 合格
张三 2 不合格
张三 1.5 合格
张三 2 不合格
希望输出结果:
姓名 里程合计 合格数 不合格数
张三 7.5 3 2
我目前的sql写法如下,但我认为这种方法太低效,有没高效的方法可实现上面的输出效果??谢谢
select 姓名,里程合计,合格数,不合格数 from(
select 姓名,sum(里程) as 里程合计 from tab group by 姓名) as a
full join
(select 姓名,count(结果) as 合格数 from tab where 结果='合格' group by 姓名) as b on a.姓名=b.姓名
full join
(select 姓名,count(结果) as 不合格数 from tab where 结果='不合格' group by 姓名) as c on a.姓名=c.姓名
...全文
相关推荐
sql语句妙用,各种sql语句的详细用法与讲解
SQL(Structured Query Language)是用于管理关系数据库的标准语言,它的妙用在于能够高效地处理和检索数据。
场景应用:你平时怎么写出“好的”SQL语句的?
对于 or+没有索引的 age 这种情况,假设它走了 userId 的索引,但是走到 age 查询条件时,它还得全表扫描,也就是需要三步过程:全表扫描+索引扫描+合并,如果它一开始就走全表扫描,直接一遍扫描就完事。=,>isnull,isnotnull 经常被认为让索引失效,其实是因为一般情况下,查询的成本高,优化器自动放弃索引的。数据库最费劲的就是跟程序链接释放。因此,我们要选择最外层循环小的,也就是,如果 B 的数据量小于 A,适合使用 in,如果 B 的数据量大于 A,即适合选择 exist。
教你写出高效的sql语句
### 教你写出高效的SQL语句在数据库管理和数据分析领域,编写高效、优化的SQL语句是提升系统性能的关键。
如何写出高效率的SQL语句--SQL优化技巧
如何写出高效率的SQL语句--SQL优化技巧SQL 优化技巧是提高数据库性能的关键所在。
oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
`命令不会保存查询结果,只保存实际执行的SQL语句。


