首页 > 解决方案 > 如何根据一列排序,然后再次使用另一列排序输出?

问题描述

我有一个表 [world],其中包含字段(名称、人口、GDP、面积等)。我可以得到这样的桌子,这很好

World 

name    Total Populat.. Pop Density/KM
China   19.18            142.3
India   17.51            393.6
USA     4.47             32.4
Indonesia 3.54           132.4
Brazil    2.85           23.8
Pakistan   2.64          213.2
Nigeria   2.51           193.2
Bangladesh 2.20          1060.9
Russia    2.05            8.5
Japan     1.79           336.3

使用代码。

SELECT name, 
ROUND (population/(SELECT sum(population) FROM world )* 100,2 ) as 'Total Population',
ROUND (population/area ,1) as 'Pop Density/KM'
FROM world 
ORDER BY 2 Desc LIMIT 10 

我正在尝试使用此代码

SELECT name, 
ROUND (population/(SELECT sum(population) FROM world )* 100,2 ) as 'Total Population',
ROUND (population/area ,1) as 'Pop Density/KM'
FROM world 
ORDER BY  2 DESC LIMIT 10, 3

这样我就可以有一个按人口显示前 10 行的表格,但按照第 3 列对它们进行排序。简而言之,我希望能够仅显示这些记录(如上表所示),但根据 Pop Density/KM Descending 明智地进行排序。我没有得到想要的结果

标签: sqlmariadb

解决方案


您需要使用子查询。但是不要对列别名使用单引号!仅对字符串和日期常量使用单引号。

所以:

SELECT *
FROM (SELECT name, 
             ROUND(population/(SELECT sum(population) FROM world) * 100, 2) as "Total Population",
             ROUND(population/area, 1) as "Pop Density/KM"
      FROM world 
      ORDER BY "Total Population" DESC
      LIMIT 10 
     ) w
ORDER BY "Pop Density/KM";

在 MariaDB 中,您还可以使用反引号作为转义字符。实际上,我建议重命名这些列,这样它们就根本不需要转义。


推荐阅读