2014-05-04 29 views
0

好的,这里的人是问题。 我必须列出每个部门的部门ID,部门名称,销售代表数量和平均佣金率。此外,我需要按部门分组,并按升序排列平均佣金率。SQL不是单组功能

我收到错误在De.Dept_ID下1行说是不是一个组由表达

这是我的代码:

SELECT DE.Dept_ID as DeptID, Dept_Name as DeptName, COUNT(SR.Sales_Rep_ID) as SalesRepCount, 
Comm_Rate as AvgCommRate 
FROM DEPT_arb DE, SALES_REP_arb SR, COMMISSION_arb C 
WHERE DE.Dept_ID = SR.Dept_ID AND 
Comm_Rate = (SELECT AVG(Comm_Rate) FROM COMMISSION_arb WHERE SR.Comm_Class = C.Comm_Class) 
GROUP BY Dept_Name 
ORDER BY C.Comm_Rate; 

我欣赏的输入

+1

你需要的,如果你调用任何聚合函数使用GROUP BY子句。 – OldProgrammer

+0

当我在Dept_Name上执行GROUP BY时,出现“未正确结束的组”错误。是的,我在它后面有一个分号。 – user2981579

+0

您可以编辑问题以拥有“GROUP BY”吗?你是否将GROUP BY DE.Dept_ID视为Dept_ID,Dept_Name'?另外,'AVG(Comm_Rate)AS AVGCOM'? – shahkalpesh

回答

0
SELECT DE.Dept_ID as Dept_ID, 
     Dept_Name, 
     COUNT(SR.Sales_Rep_ID) as NumOfSalesR, 
     AVG(Comm_Rate) as AVGCOM 
FROM DEPT_arb DE, SALES_REP_arb SR, COMMISSION_arb C 
WHERE DE.Dept_ID = SR.Dept_ID 
GROUP BY E.Dept_ID, 
     Dept_Name, 
ORDER BY C.Comm_Rate; 

您也可以考虑正确加入表格,例如:

SELECT DE.Dept_ID as Dept_ID, 
     Dept_Name, 
     COUNT(SR.Sales_Rep_ID) as NumOfSalesR, 
     AVG(Comm_Rate) as AVGCOM 
FROM DEPT_arb DE 
JOIN SALES_REP_arb SR on DE.Dept_ID = SR.Dept_Id 
JOIN COMMISION_arb C on SR.Comm_Class = C.Comm_Class 
GROUP BY E.Dept_ID, 
     Dept_Name, 
ORDER BY C.Comm_Rate; 
0

添加一个群组。

SELECT DE.Dept_ID as Dept_ID, Dept_Name, 
    COUNT(SR.Sales_Rep_ID) as NumOfSalesR, 
    Comm_Rate as AVGCOM 
FROM DEPT_arb DE, SALES_REP_arb SR, COMMISSION_arb C 
WHERE DE.Dept_ID = SR.Dept_ID 
    AND Comm_Rate = (SELECT AVG(Comm_Rate) 
        FROM COMMISSION_arb 
        WHERE SR.Comm_Class = C.Comm_Class) 
GROUP BY DE.Dept_ID, Dept_Name, Comm_Rate 
0

改写这种方式,看看它给你你想要的...

SELECT d.Dept_ID, d.Dept_Name, 
    Count(r.Sales_Rep_ID) NumOfSalesR, 
    c.Comm_Rate AVGCOM 
FROM DEPT_arb d, 
    Join SALES_REP_arb r 
     On r.Dept_ID = d.Dept_ID 
    Join COMMISSION_arb c 
     On c.Comm_Class = r.Comm_Class 
Group By d.Dept_ID, d.Dept_Name, c.Comm_Rate 
Where c.Comm_Rate = 
     (Select AVG(Comm_Rate) 
     From COMMISSION_arb 
     Where Comm_Class = r.Comm_Class) 
Order By c.Comm_Rate;