Как упорядочить на основе столбца, а затем снова упорядочить вывод, используя другой столбец? - PullRequest
0 голосов
/ 22 января 2019

У меня есть таблица [мир], в которой есть поля (имя, население, ВВП, площадь и т. Д.).Я могу получить такую ​​таблицу, которая отлично подходит

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 wise.Я не получаю желаемый результат

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вам нужно использовать подзапрос.НО не используйте одинарные кавычки для псевдонимов столбцов!Используйте только одинарные кавычки для строковых констант и констант даты.

Итак:

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 вы также можете использовать обратные символы в качестве escape-символа.На самом деле, я бы порекомендовал переименовать столбцы, чтобы их вообще не нужно было экранировать.

0 голосов
/ 22 января 2019

Вам нужно будет заключить его в другой выбор и использовать двойные кавычки, как объяснил Гордон Линофф в своем ответе.

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 2 DESC
        LIMIT 10
      )
ORDER BY "Pop Density/KM"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...