Sql server 集料中的集料

Sql server 集料中的集料,sql-server,aggregates,Sql Server,Aggregates,我试图在一个select语句中使用多个聚合,但我坚持使用一个基于另一个聚合的聚合(通过将COUNT(TrackID)乘以单价计算的总收入) 我不允许做CTE,并且尝试使用子查询失败。注释掉的三行是我失败的尝试(不是子查询失败的尝试,我已经删除了那些) 我也试过这个,但结果被忽略了 SELECT C.Country ,Ar.Name AS 'Artist Name' ,COUNT(T.TrackId) AS 'Track Count' ,COUNT(DISTINCT T.N

我试图在一个select语句中使用多个聚合,但我坚持使用一个基于另一个聚合的聚合(通过将
COUNT(TrackID)
乘以
单价计算的总收入)

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

我也试过这个,但结果被忽略了

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

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

Select [columnsNames], [aggregates]
From
(
Your Inner Query
)a
Group By [columnsNames]
Order By [columnsNames]
Select [columnsNames], [aggregates]
From
(
Your Inner Query
)a
Group By [columnsNames]
Order By [columnsNames]