如何修复分组依据中的聚合,缺少聚合值

时间:2019-08-02 06:22:37

标签: sql-server group-by grouping aggregation

我有一张销售信息表,并且有兴趣按客户分组,并返回几列的总和,计数,最大值。有什么想法。

我检查了所有“选择”列都包含在Group By语句中,而不是返回分组和汇总值,返回了详细信息。
我尝试了一些明确的命名,但这没有帮助。

SELECT
    customerID AS CUST,
    COUNT([InvoiceID]) AS Count_Invoice,
    SUM([Income]) AS Total_Income,
    SUM([inc2015]) AS Tot_2015_Income,
    SUM([inc2016]) AS Tot_2016_Income,
    MAX([prodA]) AS prod_A,
FROM [table_a] 
GROUP BY
    customerID, InvoiceID,Income,inc2015, inc2016, prodA

CUST有多行,即CUST 1、2等应该有一行。...应该这样说...

    ---------------------------------------------
    CUST    Count_Invoice   Total_Income    Tot_2015_Income Tot_2016_Income prod_A

       1    2   600 300 300 2


    BUT IT IS RETURNING THIS
    ======================================
    CUST    Count_Invoice   Total_Income    Tot_2015_Income Tot_2016_Income prod_A

       1    1   300 300 0   1

       1    1   300 0   300 1

       2    1   300 0   300 1

       2    1   500 0   500 0

       3    2   800 0   800 0

       3    1   300 0   300 1

2 个答案:

答案 0 :(得分:0)

从对预期输出的描述中,您应该仅按客户进行汇总:

SELECT
    customerID A CUST,
    COUNT([InvoiceID]) AS Count_Invoice,
    SUM([Income]) AS Total_Income,
    SUM([inc2015]) AS Tot_2015_Income,
    SUM([inc2016]) AS Tot_2016_Income,
    MAX([prodA]) AS prod_A
FROM [table_a] 
GROUP BY  
    customerID;

答案 1 :(得分:0)

您不需要另外group by列,因为它们已经通过countminmaxsum进行汇总。

所以您可以尝试

SELECT customerID as CUST
,count([InvoiceID]) as Count_Invoice
 ,sum([Income]) as Total_Income
,sum([inc2015]) as Tot_2015_Income
 ,sum([inc2016]) as Tot_2016_Income
,max([prodA])  as prod_A    --- here you are taking Max but in output it seems like sum
 FROM [table_a] 
 Group By customerID

注意:对于列prod_A,您使用的是max,它给出了1,但结果是它显示的2实际上是sum或{{1 }}。请检查。

有关更多信息,您可能会发现此链接Group by