# 创建不同地区的销售额记录表sales
create table sales(
region varchar(5) not null default '',
sale decimal(10,2) not null default 0
)engine myisam charset utf8;
# 向销售额记录表sales中插入数据:
insert into sales values
('中南',13133.62),
('东北',5422.35),
('华北',8221.06),
('西北',27241.28),
('西南',4432.06),
('华东',13221.25);
普通排序示例:从sales表中查询各个地区的销售额,并按照销售额的大小降序排序。
select region,sale from sales order by sale desc;
# 返回结果为:
+--------+----------+
| region | sale |
+--------+----------+
| 西北 | 27241.28 |
| 华东 | 13221.25 |
| 中南 | 13133.62 |
| 华北 | 8221.06 |
| 东北 | 5422.35 |
| 西南 | 4432.06 |
+--------+----------+
假如我们想按照地区的指定顺序,例如按照华北、华东、西北、西南、东北、中南这样的地区出现顺序,从sales表中查询出各个地区的销售额信息,此时仅仅使用order by实现不了这样的查询要求,我们可以利用order by + field来实现查询目标。
select region,sale from sales order by field(region,'华北','华东','西北','西南','东北','中南');
# 返回结果为:
+--------+----------+
| region | sale |
+--------+----------+
| 华北 | 8221.06 |
| 华东 | 13221.25 |
| 西北 | 27241.28 |
| 西南 | 4432.06 |
| 东北 | 5422.35 |
| 中南 | 13133.62 |
+--------+----------+
# 解析:
# order by field意为按照指定字段的指定顺序排序,field()中的第一个参数指的是sales表中的某个字段,
# 第一个参数后面跟的序列则是自定义的排序规则。
参考:
https://www.cnblogs.com/cxxjohnson/p/8040386.html
PS:关于SQL Server中的自定义排序可以参考 https://blog.csdn.net/qq_41080850/article/details/94559079