2010-09-03 5 views
3

Мне стыдно за себя, потому что я не могу сделать этот запрос правильно ... У меня есть таблица, как этотзначение SQL Query, деленная на макс (значение)

nom | code_geo | valeur |  indice 
-------+----------+--------+-------------------- 
AISNE | 02  | 81573 | 0.05 
SOMME | 80  | 79520 | 0.03 
OISE | 60  | 70004 | 0.09 

то, что мне нужно сделать разделяет каждый «индекс» на max (индекс). То есть:

nom | code_geo | valeur |  indice 
-------+----------+--------+-------------------- 
AISNE | 02  | 81573 | 0.05/0.09 
SOMME | 80  | 79520 | 0.03/0.09 
OISE | 60  | 70004 | 0.09/0.09 

моя первая догадка:

SELECT nom,code_geo,valeur,indice/(SELECT max(indice) FROM blablabla) FROM blablabla; 

моя проблема заключается в том, что «блаблабли» на самом деле является функция с 6 параметром и я не хочу повторять ЕК на подзапросе ...

Есть ли способ (лучше?) Для этого? или я должен искать другой путь

Thx заранее

+0

Какая у вас СУБД? –

+0

О, извините, я забыл рассказать .. это postgresql – pleasedontbelong

ответ

1

Вы решение выглядит отлично. Поскольку подзапрос не коррелирует с внешним запросом, СУБД должен оценивать этот подзапрос только один раз.

+0

thxs .. я возьму ваше слово – pleasedontbelong

1

Я считаю, что Postgresql позволяет CTE.

Select * into yourtable from blablabla 


WITH T2(MaxNumber) as 
(
select MAX(indice) as MaxNumber from yourtable 
) 
update t1 
set t1.indice=t1.indice/T2.MaxNumber 
from yourtable t1, T2 
+0

ваш пример не был действительно ясен, мне пришлось читать между строк, но это помогло мне разобраться с предложением WITH, и я буду используйте его позже =) Thxs .. ах и он работает на postgresql – pleasedontbelong