【发布时间】:2017-05-26 18:45:07
【问题描述】:
我正在尝试执行一个查询,其中我通过了“赛季”,结果它显示了与车手、积分、构造函数和排名中的位置相关的信息。
我想要的是这样的:
POS IN RANKING | DRIVER NAME | CONSTRUCTOR NAME | POINTS
---------------------------------------------------------
1 "Hamilton" MC Laren 360
2 "Alonso" Ferrari 290
... ... ....
我得到的问题是我无法枚举行。我认为“排名中的位置”应该是函数 row_number() 的结果,但由于某种原因,我无法使其工作。
这是我的存储函数:
CREATE TYPE ranking_t AS (
pos integer,
driver character varying(30),
constructor character varying(30),
points integer
);
CREATE OR REPLACE FUNCTION pra2.GetRankingOfPilots(sea pra2.season.name%type)
RETURNS ranking_t AS $$
DECLARE
ranking_pilots ranking_t;
BEGIN
SELECT
row_number() OVER (ORDER BY totalpuntos),
driver.name driver,
constructor.name constructor,
season.name season,
CAST(sum(runs.points) AS int) TotalPuntos
INTO ranking_pilots
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;
END;
$$
LANGUAGE plpgsql;
如果有任何建议,我将不胜感激。
提前谢谢你!
【问题讨论】:
-
阿隆索已经不在法拉利车队,也不在迈凯轮车队的汉密尔顿:P,只是说。
-
I cannot make it work.有什么问题?有什么错误吗? -
是的,错误是我尝试枚举查询,顺便说一下我使用函数 row_number() 它会产生错误,因为它说字段 totalpuntos 不存在
标签: sql postgresql stored-procedures plpgsql stored-functions