2014-01-14 1 views
0

У меня есть таблица, которая выглядит следующим образом:Найти процент первой строки в том же столбце

Day | Count 
----+------ 
1 | 59547 
2 | 40448 
3 | 36707 
4 | 34492 

И я хочу, чтобы запросить набор результатов, как это:

Day | Count | Percentage of 1st row 
----+-------+---------------------- 
1 | 59547 | 1 
2 | 40448 | .6793 
3 | 36707 | .6164 
4 | 34492 | .5792 

Я попытался с помощью окна функции, но может только показаться, чтобы получить процент от общей суммы, которая выглядит следующим образом:

Day | Count | Percentage of 1st row 
----+-------+---------------------- 
1 | 59547 | 0.347833452 
2 | 40448 | 0.236269963 
3 | 36707 | 0.214417561 
4 | 34492 | 0.201479024 

но я хочу процент первый ряд. Я знаю, что могу использовать перекрестное соединение, которое запрашивает только «День 1», но это, кажется, занимает много времени. Мне было интересно, есть ли способ написать функцию окна для этого.

+2

Ваша версия Postgres? Что вы пробовали? Определите «процент от первой строки». И используйте [средства форматирования] (http://stackoverflow.com/editing-help). –

+0

Я использую Postgres 9.1. Спасибо, что ответили на мой вопрос ниже, и советы по форматированию. Похоже, мне нужно изучить мои оконные функции. – user3195987

ответ

2

Судя по вашим номерам, вы можете искать для этого:

SELECT *, round(ct::numeric/first_value(ct) OVER (ORDER BY day), 4) AS pct 
FROM tbl; 

«Процент для каждой строки, рассчитывается как ct деленное на ct первого ряда, как это определено наименьшим day числом.»

Ключ window function first_value().

-> SQLfiddle demo.

+0

Perfect. Это именно то, что мне нужно, и спасибо за демо. – user3195987

+1

@ user3195987 Посмотрите на галочку ниже оценки ответа? http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

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

  • Нет связанных вопросов^_^