查询多个结果是用case when 条件显示列的查询效率高,还是查询后union all合并效率高.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询多个结果是用case when 条件显示列的查询效率高,还是查询后union all合并效率高.相关的知识,希望对你有一定的参考价值。

比如
select name,case bz when 1 then gongzhi else 0 end as f1 ,case bz when 2 then gongzhi else 0 end as f2
from 工资表
-------
select name, case bz when 1 then gongzhi else 0 end as f1 , 0 as f2
from 工资表
union all
select name, 0 as f1 ,case bz when 2 then gongzhi else 0 end as f2
from 工资表
哪个效率高?

事实上,数据量越大用union all的效率越高,因为case when是需要逐条分析查询结果的,而转换成union all后,分析这一步就可以省掉了。数据量越大,优势也明显 参考技术A 我觉得第一效率高
第一读表一次判断两次
第二读表两次判断两次

case when用法

参考技术A case有以下几种搭配:in any case表示无论如何;in no case表示绝不。when有以下几种用法:表示什么时候、何时;可以引导从句;俚语“入乡随俗”。

Case具有两种格式:简单Case函数和Case搜索函数。

简单Case函数:

CASE sex

WHEN ‘1’ THEN ‘男’

WHEN ‘0’ THEN ‘女’

ELSE ‘其他’ END

Case搜索函数:

CASE WHEN sex = ‘1’ THEN ‘男’

WHEN sex = ‘0’ THEN ‘女’

ELSE ‘其他’ END

显然,简单Case函数胜在简洁,但是它只适用于这种单字段的单值比较,而Case搜索函数的优点在于适用于所有比较的情况。

还有一个需要注意的问题,Case函数在满足了某个符合条件后,剩下的条件将会被自动忽略,因此,即使满足多个条件,执行过程中也只认第一个条件。

以上是关于查询多个结果是用case when 条件显示列的查询效率高,还是查询后union all合并效率高.的主要内容,如果未能解决你的问题,请参考以下文章

case when用法sql

使用 Django 的 Case/When 查询集条件来设置多个值?

存储过程里面的CASE,WHEN,THEN的用法

CASE .. Oracle SQL 中的 WHEN 表达式

SQL查询语句SELECT中带有case when嵌套子查询判断的问题

MySQL 条件, case when 和 if 方法