首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚合中的聚合

聚合中的聚合
EN

Stack Overflow用户
提问于 2019-11-21 12:01:47
回答 1查看 55关注 0票数 0

我试图在一条select语句中使用多个聚合,并被困在基于另一个聚合的值(总收入,其计算方法是COUNT(TrackID)乘以Unit Price)上。

我不被允许执行CTE,并且尝试使用子查询失败。被注释掉的三行是我失败的尝试(不是子查询的失败尝试,我已经删除了它们)。

代码语言:javascript
复制
SELECT C.Country
    ,Ar.Name AS 'Artist Name'
    ,COUNT(T.TrackId) AS 'Track Count'
    ,COUNT(DISTINCT T.Name) AS 'Unique Track Count'
    ,COUNT(T.TrackID) - COUNT(DISTINCT T.Name) AS 'Count Difference'
    --,POWER(IL.UnitPrice,COUNT(T.TrackId)) AS 'Test'
    --,SUM(IL.UnitPrice * COUNT(T.TrackID)) AS 'Total Revenue'
    --,IL.UnitPrice * COUNT(T.TrackID) AS 'Total Revenue'
    ,CASE MediaTypeId
        WHEN 3
        THEN 'Video'
        ELSE 'Audio'
        END AS MediaType
FROM Artist Ar
JOIN Album Al
    ON Al.ArtistId = Ar.ArtistId
JOIN Track T 
    ON T.AlbumId = Al.AlbumId
JOIN InvoiceLine Il
    ON Il.TrackId = T.TrackId
JOIN Invoice I
    ON I.InvoiceId = Il.InvoiceId
JOIN Customer C
    ON C.CustomerId = I.CustomerId
GROUP BY Ar.Name
    ,C.Country
    ,CASE MediaTypeId
        WHEN 3
        THEN 'Video'
        ELSE 'Audio'
        END
ORDER BY C.Country ASC, COUNT(T.TrackID) DESC, Ar.Name ASC

我也试过了,但结果被遗漏了

代码语言:javascript
复制
SELECT C.Country
    ,Ar.Name AS 'Artist Name'
    ,COUNT(T.TrackId) AS 'Track Count'
    ,COUNT(DISTINCT T.Name) AS 'Unique Track Count'
    ,COUNT(T.TrackId) - COUNT(DISTINCT T.Name) AS 'Count Difference'
    ,CASE MediaTypeId
        WHEN 3
        THEN 'Video'
        ELSE 'Audio'
        END AS MediaType
    ,T2.TotalRevenue
FROM Artist Ar
JOIN Album Al
    ON Al.ArtistId = Ar.ArtistId
JOIN Track T
    ON T.AlbumId = Al.AlbumId
JOIN InvoiceLine Il
    ON T.TrackId = Il.TrackId
JOIN Invoice I
    ON I.InvoiceId = Il.InvoiceId
JOIN Customer C
    ON C.CustomerId = I.CustomerId
JOIN (SELECT T.TrackId, SUM(Il.TrackId * Il.UnitPrice) AS 'TotalRevenue'
    FROM Track T
    JOIN InvoiceLine Il 
        ON T.TrackId = Il.InvoiceId
        GROUP BY T.TrackId) T2 ON T.TrackId = T2.TrackId
GROUP BY C.Country
    ,Ar.Name
    ,CASE MediaTypeId
        WHEN 3
        THEN 'Video'
        ELSE 'Audio'
        END
    ,T2.TotalRevenue
ORDER BY C.Country ASC, COUNT(T.TrackID) DESC, Ar.Name ASC
EN

回答 1

Stack Overflow用户

发布于 2019-11-21 12:22:36

你不能在计算中使用聚合,或者在同一查询的聚合中使用聚合,你需要将查询包装为内部查询,并在外部查询中使用聚合进行计算,如下所示:

代码语言:javascript
复制
Select [columnsNames], [aggregates]
From
(
Your Inner Query
)a
Group By [columnsNames]
Order By [columnsNames]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58967120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档