当前位置: 代码迷 >> Sql Server >> sql不能对包含会合或子查询的表达式执行聚合函数
  详细解决方案

sql不能对包含会合或子查询的表达式执行聚合函数

热度:76   发布时间:2016-04-24 10:07:41.0
sql不能对包含聚合或子查询的表达式执行聚合函数。
本帖最后由 qq_16624883 于 2014-08-19 13:53:01 编辑
select companyid,year,market,max(sum(totalprice)) from t_order 
 where companyid is not null group by companyid,year,market

如果不加max的话,查到的是
但是我想取得每个地区每年最大的销售额的公司
把它作为子查询
select companyid,market,year,max(sum) as max from 
( select companyid,year,market,sum(totalprice) as sum from t_order 
 where companyid is not null group by companyid,year,market ) a  
 group by companyid, year,market 

查询到的结果也一样

怎么才能取得每个地区每年最大的销售额的公司?
------解决方案--------------------
试一下:
;
WITH    cte
          AS ( SELECT   companyid ,
                        year ,
                        market ,
                        SUM(totalprice) [sum]
               FROM     t_order
               WHERE    companyid IS NOT NULL
               GROUP BY companyid ,
                        year ,
                        market
             )
    SELECT  a.companyid ,
            a.[year] ,
            a.market ,
            b.[max]
    FROM    cte a
            INNER JOIN ( SELECT [year] ,
                                market ,
                                MAX([sum]) [max]
                         FROM   cte
                         GROUP BY [year] ,
                                market
                       ) b ON a.[year] = b.[year]
                              AND a.market = b.market

------解决方案--------------------
...
                      ) b ON a.[year] = b.[year]
                              AND a.market = b.market
                              AND a.[sum] = b.[max] -- 1楼少了这个条件
  相关解决方案