2010-09-03 62 views
3

我为自己感到羞愧因为我不能很好地做到这一点查询......我有这样SQL查询值由最大值(价值)除以

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

什么,我需要做一个表是由最大(指数)除以每个“指数”。那就是:

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; 

我的问题是,“blablabla”其实是6个参数的函数,我不想再重复FROM子句中的子查询...

是否有另一种(更好?)的方式来做到这一点?或者我应该寻找其他方式

THX提前

+0

什么是您的RDBMS? – 2010-09-03 09:31:24

+0

哦对不起,我忘了告诉..它的postgresql – pleasedontbelong 2010-09-03 09:32:14

回答

1

您的解决方案看起来很好。由于子查询与外部查询不相关,因此DBMS应该只评估一次子查询。

+0

thxs ..我会采取你的话 – pleasedontbelong 2010-09-03 09:59:59

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 2010-09-03 11:21:39