今天遇到一个行政区域显示的问题,就是在查询行政区域时,查询出来的内容,是按照插入数据的时间进行的,但我常用的四川省,我希望在最前面,方便我第一时间看到,但是无论通过名称或者序号排序都无法实现。
查询语句及结果
SELECT region_id, region_name
FROM area_4
WHERE parent_id = 0
所以就用到了CASE END条件表达式,根据条件对结果进行判断和返回不同的值,然后进行自定义顺序
SELECT region_id, region_name
FROM area_4
WHERE parent_id = 0
ORDER BY
CASE
WHEN region_name = '四川省' THEN 0
WHEN region_name = '成都市' THEN 1
WHEN region_name = '自贡市' THEN 2
WHEN region_name = '简阳市' THEN 3
WHEN region_name = '贡井区' THEN 4
WHEN region_name = '大安区' THEN 5
ELSE 6
END;
这样在查询省时,会将四川省放前面
查找市时,会将成都市放前面,泸州市放后面
查询县或者区时,会将泸金牛区放前面,其次是简阳市 ,最后是武侯区
这样SQL在查询中ORDER BY子句会配合CASE表达式用于对结果进行排序。根据给定的条件,它会为每一行赋予一个排序值,然后按照这个排序值进行排序。
在这个例子中,根据region_name的不同取值,使用CASE表达式为每一行分配一个排序值。如果region_name等于'四川省',则排序值为0;如果region_name等于'成都市',则排序值为1;如果region_name等于'泸州市',则排序值为2;以此类推。如果region_name不满足以上任何条件,则排序值为6。
最后,ORDER BY子句会根据这个排序值对结果进行排序。排序值较小的行会在排序结果中靠前,排序值较大的行会在排序结果中靠后。这样可以按照指定的顺序对结果进行排序。