sql - 如何根据一列排序,然后再次使用另一列排序输出?
问题描述
我有一个表 [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 明智地进行排序。我没有得到想要的结果
解决方案
您需要使用子查询。但是不要对列别名使用单引号!仅对字符串和日期常量使用单引号。
所以:
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 中,您还可以使用反引号作为转义字符。实际上,我建议重命名这些列,这样它们就根本不需要转义。
推荐阅读
- python - python如何对数据框的对角线求和
- flutter - 水平滚动周历颤动
- android - 将 Laravel APP 转换为 Apache Cordova APP
- spring-integration - Spring Integration - 重放相同的流程
- react-admin - React-admin:使用 CloneButton 时如何省略创建视图?
- swift - 如何从选择突出显示不同颜色的折线图
- javascript - 按钮编辑更改数据属性以输入
- intersystems-iris - 类日期/时间属性有什么用
- grafana - Grafana:即使“警报验证错误:未找到警报规则使用的数据源”,也会加载仪表板
- ethereum - ERC20 代币转移到智能合约