Sql 基于带子查询的聚合函数更新列

Sql 基于带子查询的聚合函数更新列,sql,oracle,Sql,Oracle,我需要有一个列,其中包含从带有子查询的count()函数中获取的数据。我目前正在使用一个临时表,它是由以下人员创建的: CREATE TABLE tempfact1 AS ( SELECT coursesloc.courseID, preferences.appid, campuses.campusid FROM coursesloc, preferences, campuses WHERE coursesloc.courseID = preferences.course

我需要有一个列,其中包含从带有子查询的count()函数中获取的数据。我目前正在使用一个临时表,它是由以下人员创建的:

CREATE TABLE tempfact1 AS
  (
    SELECT coursesloc.courseID, preferences.appid, campuses.campusid
    FROM coursesloc, preferences, campuses
  WHERE coursesloc.courseID = preferences.courseID AND coursesloc.campusid = campuses.campusid AND preferences.prefaccepted = 'Y'
  )
;

ALTER TABLE tempfact1
ADD TNA NUMERIC;
然后,我运行以下命令,尝试使用以下命令生成TNA(每个校园的申请者总数):

UPDATE tempfact1
SET TNA = (SELECT COUNT(appid) FROM tempfact1 GROUP BY campusid)

我不能这样做,因为它返回了多行。我不确定如何让它在更新中一次只输出一行,或者在createtable命令中是否有更简单更好的方法

您可以尝试删除
GROUP by
子句。它将返回多行,即每个校园id的计数。

我为您的问题创建了一个小演示

/*Demo table....*/
create table mtp (rno integer,name varchar(max))

/*Demo Data....*/
insert into mtp values (1,'a')
insert into mtp values (1,'b')
insert into mtp values (2,'c')
insert into mtp values (2,'d')
insert into mtp values (2,'e')

/* Select Result, use this countid column for your new table...*/
select 
    COUNT(*) OVER (PARTITION BY rno)as countid
    ,rno
    ,name
From mtp 

将表创建为:

 CREATE TABLE tempfact1 AS
      ( SELECT courseID,appid,campusid,COUNT(*) TNA 
        FROM(
        SELECT coursesloc.courseID, preferences.appid, campuses.campusid
        FROM coursesloc, preferences, campuses
         WHERE coursesloc.courseID = preferences.courseID AND coursesloc.campusi=campuses.campusid AND preferences.prefaccepted = 'Y' ) GROUP BY campusid
    );

如果有任何语法错误,请更正

实际上他想要这样,如果你想在此之前追加组,那么这个问题是错误的。这不起作用,它只会将TNA列中的每一行设置为tempfact1表的总计数,这不是我想要的。我特别需要每个校园的appid计数。如果需要group by,那么您可以尝试映射校园id,以避免多行扫描!我不知道OVER(按列划分),这正是我所需要的。