sql中casewhen的用法 掌握条件判断的高级写法

哦,是的...什么时候的问题...这个东西...还在2 01 0年。
我在2 02 2 年就一直在使用它...有时它很烦人...想象一下...例如那个城市...例如那个公司...数据量是多少...可能是几百万或几千万...你写一个SQL查询...这很可怕...
这很可怕。
当情况是...条件1 然后结果1 ...这个顺序非常重要...你错了...例如订单大小排名...如果你把total_amount>0放在前面...它们不都是LowValue吗?我绝对不想要这个结果...我当时可能很困惑...后来我意识到...条件的顺序必须颠倒...
并且数据发生变化...例如国家代码...“US”更改为“United States”...这是一个简单的形式案例,其中country_code是“US”然后是“United States”...这相对容易...但如果你有很多国家...它可能会杀了你。
想象一下... 2 02 2 年那家公司... 数据量是多少... 几十万还是几百万个国家代码... 要一一写吗?不可能...
那么复杂的逻辑...多条件组合...比如产品分类...category='Electronics' and Price>1 000...这种情况是AND或OR...你要小心...不要放太多步骤...否则你会写几百行SQL...我觉得很难理解。
好...但是有时候没办法...
性能提升...这个很重要...状态顺序...首先你把最优先的条件...比如=...比>更有效率...比如用rank作为判断条件...你最好用索引...不然那个城市有几百万条数据...当你把它们都加载完...能有多慢...index...想象一下...系统在2 02 2 年...如果不方便...你肯定会死...
然后空...有很多错误...如果报价毫无价值 case 0...您可能是错的。
其实,NULL在业务中随处可见...
终极高级应用...比如动态排序...动态确定标签字段...这很酷...但是很复杂...比如批处理函数中的条件统计...计算不同值的订单数量...这需要求和(在某些时候...)...你必须仔细写它...当出现很多错误时...慢慢学习技术你必须...不要着急...从简单的情况开始...逐渐尝试复杂的逻辑...思考...2 02 2 年的公司...数据量是多少...几百万几千万...如果你写不好SQL...那就可怕了...

sql中if else的用法 详解sql中条件判断的实现

我记得上次我正在帮助同事调试 SQL;他的案例让我很困惑。
我忘记加一个ELSE,导致很多行数据变成NULL。
真的很酷。

例如,在本例中,用户点级别分类。
1 0 月 2 6 日 假设 2 02 3 年,我们来计算一下部分用户的折扣率。

sql 选择用户 ID; 事 积分 >= 1 000 则“VIP” 积分 >= 5 00 则为“黄金” 积分 >= 1 00 然后是“金钱” 其他“正常” END AS 会员级别; 事 当点 >= 1 000 时 0.2 当点数 >= 5 00 时,则为 0.1 当点数 >= 1 00 时,则为 0.05 另一种生活 END AS 折扣率 来自用户 其中 user_id = 1 2 3 4 5 ;
用户ID为1 2 3 4 5 ,积分为8 5 0积分。
那么他就处于“黄金”级别,折扣为 0.1 如果我得了1 5 00分怎么办? “VIP”级别;折扣0.2 这个逻辑清楚吗?
但是,如果将来积分系统发生变化,例如添加新的“白金”级别。
CASE 表达式必须进行重大更改。
如果多个CASE嵌套分开是不是会更灵活?
sql 选择用户 ID; 事 积分 >= 1 5 00 则为“白金” 积分 >= 1 000 则“VIP” 积分 >= 5 00 则为“黄金” 积分 >= 1 00 然后是“金钱” 其他“正常” END AS 会员级别; 事 当点数 >= 1 5 00 时,则 0.2 5 当积分>=1 000时然后0.2 当点数 >= 5 00 时,则为 0.1 当点数 >= 1 00 时,则为 0.05 另一种生活 END AS 折扣率 来自用户 其中 user_id = 1 2 3 4 5 ;
这样,添加新的步骤只需要添加一个WHEN条件即可。
但是太多的嵌套会降低可读性吗?
等等,还有一个。
之前我也用MySQL的IF函数写过类似的逻辑,但发现它只是做了简单的判断。
示例:
sql 选择用户 ID; IF(部门 = '销售', 工资 1 .1 , 工资) AS adjustment_salary 来自员工 WHERE 员工 ID = 1 001 ;
如果部门是“销售”,工资是1 .1 倍。
但如果你想评判多个部门怎么办?还是需要CASE。
这个IF函数是不是有点多余?
但是它的优点是写起来比较短。
但是如果你写PostgreSQL,它没有IF函数,只能使用CASE。

因此,CASE表达式是个好东西;但是,如果过多使用它们,则需要考虑性能。
以前它有一个包含三个 CASE 层的查询,需要几分钟才能运行。
后来改成了TEMPORARY TABLE + JOIN,速度快了十倍。

现在问题来了:如果数据量大得多,比如一百万条记录呢? CASE 语句将拉取整个查询。
此时分桶或索引会更有效吗?