Sql 从“选择”内的子查询中选择列?
如何将Attr1从子查询选择到父查询?我尝试使用Average.Attr1,但不起作用 不是单一的组功能Sql 从“选择”内的子查询中选择列?,sql,Sql,如何将Attr1从子查询选择到父查询?我尝试使用Average.Attr1,但不起作用 不是单一的组功能 您可以向这些聚合函数添加别名,以便在外部查询中使用它们 SELECT SUM(avg_attr1), SUM(avg_attr2), SUM(avg_attr3), 0 FROM {Report}, ( SELECT AVG(Report.Attr1) as avg_attr1, AVG(Report.Attr2
您可以向这些聚合函数添加别名,以便在外部查询中使用它们
SELECT SUM(avg_attr1),
SUM(avg_attr2),
SUM(avg_attr3),
0
FROM {Report},
(
SELECT AVG(Report.Attr1) as avg_attr1,
AVG(Report.Attr2) as avg_attr2,
AVG(Report.Attr3) as avg_attr3
...
或者,如果您只是想限制它们,那么您可以将HAVING子句与GROUP BY一起使用
...
GROUP BY Report.Attr1, Report.Attr2, Report.Attr3
HAVING AVG(Report.Attr1) > {SomeNumber}
) Average
...
我不确定这是否是您想要的,但我通过以下方式实现:
WITH REPORT (STARTDATE,ENDDATE,DATE1,ATTR1,ATTR2,ATTR3)AS(
SELECT DATE '2018-01-01',DATE '2018-02-01',DATE '2018-01-11', 1,2,3 FROM DUAL UNION ALL
SELECT DATE '2018-01-01',DATE '2018-02-01',DATE '2018-01-11',1,2,3 FROM DUAL UNION ALL
select date '2018-01-01',DATE '2018-02-01',DATE '2018-01-11',1,2,3 from dual
)
SELECT SUM(Report.Attr1),
SUM(Report.Attr2),
SUM(REPORT.ATTR3),
0,
average.a,average.b,average.c
FROM REPORT,
(
SELECT AVG(REPORT.ATTR1) A,
AVG(REPORT.ATTR2) B ,
AVG(Report.Attr3) c
FROM Report
WHERE
STARTDATE <= REPORT.DATE1 AND
Report.Date1 <= EndDate
GROUP BY Report.Attr1, Report.Attr2, Report.Attr3
) Average
WHERE
STARTDATE <= REPORT.DATE1 AND
REPORT.DATE1 <= ENDDATE
GROUP BY 0,
average.a,average.b,average.c
您可以通过提供别名来引用它们。现在,如果您说Average.attr,您将得到Report.Attr1对应的值
AVGReport.Attr]有一个]而不是1请添加一些示例数据oops谢谢,在我发布此问题之前,我的编辑是错误的。但这不是错误的原因。在表中有一个名为Date的列可能非常危险,因为它是一个保留字。内部select未连接到外部select,使其成为笛卡尔连接。也许这不是你想要的。
WITH REPORT (STARTDATE,ENDDATE,DATE1,ATTR1,ATTR2,ATTR3)AS(
SELECT DATE '2018-01-01',DATE '2018-02-01',DATE '2018-01-11', 1,2,3 FROM DUAL UNION ALL
SELECT DATE '2018-01-01',DATE '2018-02-01',DATE '2018-01-11',1,2,3 FROM DUAL UNION ALL
select date '2018-01-01',DATE '2018-02-01',DATE '2018-01-11',1,2,3 from dual
)
SELECT SUM(Report.Attr1),
SUM(Report.Attr2),
SUM(REPORT.ATTR3),
0,
average.a,average.b,average.c
FROM REPORT,
(
SELECT AVG(REPORT.ATTR1) A,
AVG(REPORT.ATTR2) B ,
AVG(Report.Attr3) c
FROM Report
WHERE
STARTDATE <= REPORT.DATE1 AND
Report.Date1 <= EndDate
GROUP BY Report.Attr1, Report.Attr2, Report.Attr3
) Average
WHERE
STARTDATE <= REPORT.DATE1 AND
REPORT.DATE1 <= ENDDATE
GROUP BY 0,
average.a,average.b,average.c
SELECT SUM(Report.Attr1),
SUM(Report.Attr2),
SUM(Report.Attr3),
0,
Average.attr
FROM {Report},
(
SELECT AVG(Report.Attr1) as attr,
AVG(Report.Attr2),
AVG(Report.Attr3)
FROM Report
WHERE
StartDate <= Report.Date AND
Report.Date <= EndDate
GROUP BY Report.Attr1, Report.Attr2, Report.Attr3
) Average
WHERE
StartDate <= Report.Date AND
Report.Date <= EndDate