plpgsql过程:如何将auto_increment字段添加到查询中

时间:2017-05-24 09:57:03

标签: sql postgresql stored-procedures plpgsql

我有以下plpgsql过程/函数,我试图获取一组具有Auto_increment值的记录。我已经组成了这个领域"位置"存储自动增量,我想这是错误的,但我不知道如何计算这个查询,我想添加一个新的计算字段。我想我的意图很明确。有人能帮助我吗?,拜托!

CREATE OR REPLACE FUNCTION pra2.GetRankingOfPilots(IN sea pra2.season.name%type)
RETURNS setof RECORD AS $BODY$
DECLARE
    r RECORD;
    fila integer;
BEGIN
    fila:=0;
    FOR r IN SELECT  
          position,
          driver.name driver, 
          constructor.name constructor,
          season.name season,
          CAST(sum(runs.points) AS int) totalpuntos
        FROM 
          pra2.hired hired
        INNER JOIN pra2.constructor on  hired.name_constructor = pra2.constructor.name
        INNER JOIN pra2.driver on hired.num_driver = pra2.driver.num
        INNER JOIN pra2.runs on pra2.driver.num=pra2.runs.num_driver
        INNER JOIN pra2.race on pra2.runs.name_race=pra2.race.name AND pra2.runs.season_fk=pra2.race.season_fk AND pra2.runs.season_fk=pra2.race.season_fk
        INNER JOIN pra2.season on hired.name_season=pra2.season.name AND pra2.race.season_fk=pra2.season.name
        WHERE
            pra2.season.name=sea
        GROUP BY
            season,driver,constructor
        ORDER BY
            TotalPuntos Desc
    LOOP
        fila:=fila+1;
        r.posicion:=fila;
        RETURN NEXT r;
    END LOOP;
RETURN;
END; 
$BODY$ 
LANGUAGE plpgsql;

提前谢谢!!

1 个答案:

答案 0 :(得分:0)

尝试:

SELECT  
          row_number() over () position,
          driver.name driver, 
          constructor.name constructor,
          season.name season,
          CAST(sum(runs.points) AS int) totalpuntos
        FROM 
          pra2.hired hired
        INNER JOIN pra2.constructor on  hired.name_constructor = pra2.constructor.name
        INNER JOIN pra2.driver on hired.num_driver = pra2.driver.num
        INNER JOIN pra2.runs on pra2.driver.num=pra2.runs.num_driver
        INNER JOIN pra2.race on pra2.runs.name_race=pra2.race.name AND pra2.runs.season_fk=pra2.race.season_fk AND pra2.runs.season_fk=pra2.race.season_fk
        INNER JOIN pra2.season on hired.name_season=pra2.season.name AND pra2.race.season_fk=pra2.season.name
        WHERE
            pra2.season.name=sea
        GROUP BY
            season,driver,constructor
        ORDER BY
            TotalPuntos Desc