Een alias gebruiken in SQL-berekeningen

Waarom werkt deze zoekopdracht niet?

SELECT 10 AS my_num, my_num*5 AS another_number
FROM table

In dit voorbeeld probeer ik de my_num alias te gebruiken in andere berekeningen. Dit resulteert in onbekende kolom “my_num”

Dit is een vereenvoudigde versie van wat ik probeer te doen, maar in principe zou ik een alias willen gebruiken om andere berekeningen te maken. Mijn berekeningen zijn veel gecompliceerder en daarom zou het leuk zijn om het een alias te geven, aangezien ik het meerdere keren op verschillende manieren herhaal.


Antwoord 1, autoriteit 100%

Verpak uw hergebruikte alias eenvoudig met (SELECT alias):

SELECT 10 AS my_num, 
       (SELECT my_num) * 5 AS another_number
FROM table

Antwoord 2, autoriteit 6%

Je moet een subselect gebruiken om die aliassen op die manier te gebruiken

SELECT my_num*5 AS another_number FROM
(
    SELECT 10 AS my_num FROM table
) x

Antwoord 3, autoriteit 3%

Aliasen in sql zijn niet zoals variabelen in een programmeertaal. Er kan alleen op bepaalde punten opnieuw naar aliassen worden verwezen (met name in de clausules GROUP BYen HAVING). Maar u kunt een alias in de SELECT-clausule niet opnieuw gebruiken. U kunt dus een afgeleide zoekopdracht gebruiken (zoals voorgesteld door Rubens Farias) waarmee u in principe uw kolommen kunt hernoemen en/of berekende kolommen een naam kunt geven.

Of u kunt een VIEWgebruiken als uw formules over het algemeen vast zijn

CREATE VIEW table10 AS SELECT 10 AS my_num FROM table;
SELECT my_num * 5 AS another_number FROM table10;

Ik denk dat dit iets sneller zal zijn dan het gebruik van een afgeleide zoekopdracht, maar het hangt waarschijnlijk sterk af van uw echte zoekopdracht.

Of je kunt het werk gewoon dupliceren:

SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;

Wat misschien handig is in iets als php/perl:

my $my_num = 10;
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";

Antwoord 4

Een andere optie is om de APPLY-operator te gebruiken

SELECT my_num, my_num*5 AS another_number
FROM table
CROSS APPLY 
(SELECT 5 AS my_num) X

Other episodes