【发布时间】:2015-03-23 19:54:24
【问题描述】:
我拿到了桌子:
一般
CREATE TABLE general
(
equipo character varying(30) NOT NULL,
partidos_jug integer,
partidos_gana integer,
partidos_emp integer,
partidos_perd integer,
puntos integer,
goles_favor integer,
CONSTRAINT general_pkey PRIMARY KEY (equipo)
)
装备
create table equipos
(num_eqpo serial,
ciudad varchar (30),
num_gpo int,
nom_equipo varchar (30),
primary key (num_eqpo),
foreign key (num_gpo) references grupos (num_gpo))
派对
create table partidos
(semana int,
num_eqpo_loc int,
num_eqpo_vis int,
goles_loc int,
goles_vis int, primary key (semana,num_eqpo_loc,num_eqpo_vis),
foreign key (num_eqpo_loc) references equipos (num_eqpo),
foreign key (num_eqpo_vis) references equipos (num_eqpo))
我想将 Equipos 表中的某些数据复制到 General 表中:
CREATE OR REPLACE FUNCTION sp_tablageneral () RETURNS void AS $$
DECLARE cont int:= (SELECT count(num_eqpo)FROM equipos);
BEGIN
while cont>0
LOOP
INSERT INTO general(equipo,partidos_jug)
SELECT nom_equipo, COUNT(*) FROM equipos E, partidos as P
WHERE E.num_eqpo = cont AND (P.num_eqpo_loc=cont OR P.num_eqpo_vis=cont);
cont:= cont - 1;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
我将该函数分成小块代码:
INSERT INTO general(equipo)
SELECT nom_equipo FROM equipos E
WHERE E.num_eqpo = 1;
SELECT COUNT(*) FROM partidos as P WHERE (P.num_eqpo_loc=1 OR P.num_eqpo_vis=1)
我想复制所有记录中的所有信息,而不仅仅是第一个。
使用该函数,我得到这个错误:
ERROR: the "e.nom_equipo" column must appear in the GROUP BY clause or be used in an aggregate function
LINE 2: SELECT nom_equipo, COUNT (*) FROM equipos E, partid ...
^
知道为什么这个错误会出现在那个简单的查询中吗?
非常感谢!
【问题讨论】:
-
你在两个小时前问过同样的问题,那里已经给出了答案。
标签: sql postgresql select