簡體   English   中英

從選擇子查詢里面選擇一列?

[英]Select a column from subquery inside select?

如何從子查詢到父查詢中選擇Attr1? 我試圖使用Average.Attr1,但不起作用。

不是單組分組功能

SELECT SUM(Report.Attr1), 
       SUM(Report.Attr2), 
       SUM(Report.Attr3), 
       0
FROM {Report}, 
(
    SELECT AVG(Report.Attr1),
           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

您可以為這些聚合函數添加別名,以便可以在外部查詢中使用它們

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相對應的值

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM