我有一张桌子:
+----+-----------+------------+----------+
| id | country | state | city |
+----+-----------+------------+----------+
| 1 | US | Georgia | Atlanta |
| 2 | US | California | |
| 3 | US | | |
| 4 | Canada | Ontario | |
| 5 | Canada | Manitoba | Winnipeg |
| 6 | Canada | | |
我想创建一个查询,但无法正确构建我的
locations
。这就是我想要的结果:+----+-----------+------------+----------+
| id | country | state | city |
+----+-----------+------------+----------+
| 6 | Canada | | |
| 3 | US | | |
| 4 | Canada | Ontario | |
| 2 | US | California | |
| 5 | Canada | Manitoba | Winnipeg |
| 1 | US | Georgia | Atlanta |
基本上,这是我想优先考虑的问题:
国家名单。按字母顺序排列。
国家清单。按字母顺序排列。
城市列表。按字母顺序排列。
此查询似乎没有考虑空列(我没有在
ORDER BY
表中使用空列):SELECT * FROM locations
ORDER BY
country,state,city
最佳答案
试试这个ORDER BY
子句:
SELECT *
FROM locations
ORDER BY
CASE WHEN state = '' AND city = '' THEN 0
WHEN city = '' THEN 1
ELSE 2 END,
country,
state,
city;
这种排序逻辑首先将那些丢失了州和市的记录放在首位。接下来是只丢失城市的记录,最后是所有三个字段都具有非空数据的记录。
关于mysql - 首先用空字符串对结果进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56987341/