2013-02-11 4 views
1

Добрый день.Округление чисел в столбце в Postgre до ближайшего целого числа

У меня есть несколько таблиц, заполненных информацией о странах. В одной из этих таблиц содержится показатель численности населения каждой страны; другой - процентное соотношение говорящих на каждом языке.

Мы должны взять эти два номера и сделать столбец, в котором указано, сколько динамиков имеется для каждого языка ... в основном, мы их умножаем. Это достаточно просто. Однако не просто показать их в том виде, в котором мы должны.

Вот запрос я использую:

SELECT country.name AS \"country\", 
     city.name AS \"capital\", 
     country_language.language, 
     (country.population * country_language.percentage) AS \"speakers\" 
FROM lab2.country, lab2.country_language, lab2.city 
WHERE country.country_code = country_language.country_code 
AND city.id = country.capital 
AND country_language.is_official = true 
ORDER BY country.name, 
     (country_language.percentage * country.population) DESC; 

Это то, что первая результирующая таблица ячейка заполнена:

1190528034.66797 

И вот что он должен быть:

11905280 

Обычно я просто делаю эти целые числа одного или другого, и это решит проблему. Но, как вы видите, числа, которые я хочу округлить, не обязательно появляются после десятичной точки.

Что мне делать, чтобы округлить их?

Вот мой сайт (это запрос 5, который вы хотите выбрать):

http://babbage.cs.missouri.edu/~asm3kf/cs3380/lab2/lab2.php

и вот страница мы должны соответствовать:

http://babbage.cs.missouri.edu/~klaricm/cs3380/lab2/lab2.php

Вы будете видеть, что несоответствие проходит через всю таблицу.

Заранее благодарен!

EDIT:

Я обновил сайт, включив в него численности населения и процента. Надеюсь, это поможет в некотором роде.

+0

с использованием потолка/пола/раунда может помочь, хотя ожидаемый результат на 2 порядка меньше фактического, это правильно или вы пропускаете некоторые цифры? – Marc

+1

Похоже, ваш 'country_language.percentage' сохраняется в процентах, т.е. '75%', а не десятичное значение. '.75'. Итак, первым шагом было бы их преобразование, а затем использовать ['round()') (http://www.postgresql.org/docs/9.1/static/functions-math.html) – Sean

+0

Шон, Процент числа сохраняются как реальные числа, в соответствии с схемой. – nerdenator

ответ

1

Просто округлите результат уравнения?

round(country.population * country_language.percentage) AS \"speakers\" 

Чтобы добавить необходимые изменения, чтобы приспособить процентный формат:

round(country.population * (country_language.percentage/100)) AS \"speakers\" 

Деление МОГ усечение/круглый результат для вас в любом случае, у меня нет PostgreSQL под рукой, чтобы проверить.

+0

Хороший глаз, я не думал делать конверсию на фактическом проценте! Есть причина, по которой я делаю майор с меньшей математикой ...: P – nerdenator

Смежные вопросы