在MySQL5.7中,我有一列有28列和4000行。我想首先引入具有所有数据的行或具有最大列数据的行,然后逐渐跟随其他行。我如何实现这一目标?
例如: 表:学生
名字 | 年龄 | 地址 |
---|---|---|
晒黑 | 10 | |
吉布 | 10 | 加利福尼亚 |
哈尔 | ||
pur | 12 |
预期输出:“gib”应该首先出现,然后是“tan”或“pur”,因为它们都只有 1 列的数据,然后是没有任何数据的“hal”。
使用这个
ORDER BY
子句:
ORDER BY (column1 IS NOT NULL) +
(column2 IS NOT NULL) +
(column3 IS NOT NULL) +
.......................
(column28 IS NOT NULL) DESC;
每个
columnX IS NOT NULL
表达式的计算结果为 1
(对于 TRUE
)或 0
(对于 FALSE
)。NULL
列的数量,您可以使用此数字结果对行进行降序排序。
假设
name
列永远不会有空值,我们可以尝试:
SELECT name, age, address
FROM yourTable
ORDER BY
name,
age IS NULL, -- non null age first
age, -- sort ascending by age
address IS NULL, -- non null address first
address; -- sort ascending by address