我正在编写一个将学校表连接到地区表的SQL查询。每个学校都隶属于一个地区的简单一对多关系。我的查询如下:

SELECT
    schools.id AS schoolid,
    schools.name AS school,
    districts.id AS districtid,
    districts.name AS district
FROM sms_schools AS schools
    LEFT JOIN sms_districts AS districts ON schools.districtid = districts.id
WHERE 1 = 1
ORDER BY districts.name, schools.name

我之所以加入左派,是因为并非每所学校都隶属于一个地区。例如,一所学校可能是在家上学的,其中可能包含所有在家上学的学生。那不会在一个地区。

所以我想做的是使用ORDER BY来按地区名称排序,然后按学校名称排序。唯一的问题是,我希望空区位于底部,以便可以在输出末尾使用一个名为“其他”的组。

是否可以通过在输出末尾以null升序进行排序?

最佳答案

问了问题仅1分钟后,我就找到了答案。在order by子句用例中,使null具有比其他任何东西更高的值:

 ORDER BY (CASE WHEN districts.id IS NULL then 1 ELSE 0 END),districts.name, schools.name;

10-07 23:09