我正在编写一个将学校表连接到地区表的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;