对数据库表进行排序,将包含所有列数据的行放在前面

问题描述 投票:0回答:2

在MySQL5.7中,我有一列有28列和4000行。我想首先引入具有所有数据的行或具有最大列数据的行,然后逐渐跟随其他行。我如何实现这一目标?

例如: 表:学生

名字 年龄 地址
晒黑 10
吉布 10 加利福尼亚
哈尔
pur 12

预期输出:“gib”应该首先出现,然后是“tan”或“pur”,因为它们都只有 1 列的数据,然后是没有任何数据的“hal”。

sql mysql mysql-5.7
2个回答
1
投票

使用这个

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
)。
将它们相加得到的是每行中 non-
NULL
列的数量,您可以使用此数字结果对行进行降序排序。


0
投票

假设

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
© www.soinside.com 2019 - 2024. All rights reserved.