2009-05-28 5 views
2

Existe-t-il un autre moyen de soustraire la plus petite valeur de toutes les valeurs d'une colonne, en compensant efficacement les valeurs?Soustraction de la valeur minimale de toutes les valeurs dans une colonne

La seule façon que j'ai trouvée devient horriblement compliquée pour des requêtes plus complexes.

CREATE TABLE offsettest(value NUMBER); 
INSERT INTO offsettest VALUES(100); 
INSERT INTO offsettest VALUES(200); 
INSERT INTO offsettest VALUES(300); 
INSERT INTO offsettest VALUES(400); 

SELECT value - (SELECT MIN(value) FROM offsettest) FROM offsettest; 

DROP TABLE offsettest; 

Je voudrais limiter à une seule requête (pas de procédures stockées, les variables, etc.), si possible, et le standard SQL est préférable (bien que j'utilise Oracle).

+0

Qu'est-ce qui est horriblement compliqué avec votre solution? Vous devez trouver la valeur MIN, d'où votre sélection agrégée. Ensuite, vous devez soustraire d'où votre sélection finale. – topchef

+0

Je ne pense pas qu'il y ait une syntaxe plus facile que ça ... Vous pouvez devenir créatif et rejoindre cette table à elle-même, je suppose, mais ça va certainement devenir plus alambiqué ... –

Répondre

5

Je crois que cela fonctionne comme la norme ANSI 1999.

SELECT value - MIN(value) OVER() FROM offsettest;

+0

+1 belle fonctionnalité qui fait définitivement de la syntaxe plus simple – topchef

-1

Il vous aurait permis de voir votre requête réelle, cependant, puisque selon que vous devez manipuler plus d'une colonne de cette façon, et les différents minimums proviennent de rangées différentes, il peut y avoir des façons plus efficaces de le faire. Si le OVER() fonctionne pour vous, alors bien.

Questions connexes