SQL语句在数据库(mdb)中的应用:select top

哎哟,这SELECT TOP子句啊,我在工作中用过好几次了,挺方便的。
记得有一次,我需要从公司数据库里提取前五条销售记录,那时候正好用到这个。

那是在2 01 9 年,我们公司刚换了一套新的销售管理系统。
我就在SQL命令输入面板里输了个SELECT TOP 5 FROM Sales,然后运行一下,嗖的一下就看到了前五条销售记录。
这玩意儿真是省了不少时间呢。

还有一次,我需要分析一下客户分布情况,想看看前3 0%的客户都集中在哪些地区。
那时候我就用了SELECT TOP 3 0 PERCENT FROM Customers ORDER BY Region。
结果一出来,我就能清楚地看到哪些地区客户最多,方便我后面做市场推广。

有一次,我们部门要做一个项目,得找几个面积最小的地块来规划。
我就在SQL里写了个SELECT TOP 5 FROM Properties ORDER BY Area ASC。
这样一操作,面积最小的五块地就全出来了。

不过,说起来这SELECT TOP子句还是有讲究的。
我记得有一次,有个同事想用百分比,结果写了个1 .5 PERCENT,结果系统直接报错了。
后来我告诉他,百分比只能是整数,像0.01 %这种是不行的。

再提醒一下,用这个子句的时候,得确保数字或百分比设置得合理,别弄得太少了或者太多了。
还有,ORDER BY后面的字段得是表里实际存在的,排序方式也要符合需求,不然数据可能就看不明白了。

SQL中,当case,when语句返回多个值时怎样放在select 子语句中才合适?

说白了,CASEWHEN在SQL里就是个条件判断工具,但直接让它返多个值是行不通的。
你主要得琢磨两种用法:
先说最重要的,CASEWHEN最常规的用法是给单个列返不同值。
比如去年我们跑那个电商报表项目,要算折扣后价格,就用CASEWHEN原价>1 000THEN原价0.9 ELSE原价END,直接在SELECT里写,简单粗暴。
另外一点,你要返多个列,就得每个列单独写CASEWHEN,像处理用户等级那种,CASEWHEN积分>5 000THEN'VIP'ELSE'普通用户'ENDASlevel,这么写没错,但想想看,如果条件特别多,SQL语句能长到吓人。

我一开始也以为能用CASEWHEN直接返一个数组,后来发现SQL不是JSON,不支援这种骚操作。
等等,还有个事,子查询配合CASEWHEN用的时候得小心,去年有个坑,子查询直接写SELECT年龄FROM用户表不加条件,结果返了5 000条数据,CPU直接干烧,用行话说叫雪崩效应,其实就是前面一个小延迟把后面全拖垮了。
所以记得给子查询加WHERE,比如SELECTMAX(CASEWHEN年龄>3 0THEN收入ELSE0END)FROM用户表,这样返的才是个数。

这个点很多人没注意,用CASEWHEN处理多条件列的时候,尽量别超过5 个分支,超过的话建议换个逻辑,比如用CASEWHEN配合CASEWHEN,或者干脆用CASEWHEN转成字符串用逗号隔开,但这个写法调试起来挺坑的。