我有一张桌子:

+----+-----------+------------+----------+
| 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/

10-16 07:07