【问题标题】:SQL Not A Single Group Group FunctionSQL 不是一个单一的组组函数
【发布时间】:2014-06-21 01:16:52
【问题描述】:

好的,问题来了。 我必须列出每个部门的部门 ID、部门名称、销售代表人数和平均佣金率。我还需要按部门分组,并按平均佣金率升序排序。

我在 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;

感谢您的意见

【问题讨论】:

  • 如果调用任何聚合函数,则需要使用 GROUP BY 子句。
  • 当我对 Dept_Name 执行 GROUP BY 时,我收到“Group by not properly end”错误。是的,我后面确实有一个分号。
  • 您可以编辑问题以拥有GROUP BY 吗?你GROUP BY DE.Dept_ID as Dept_ID, Dept_Name吗?另外,AVG(Comm_Rate) AS AVGCOM?
  • 添加了一个组,但我现在收到一个不同的错误。刚刚更新了代码。

标签: sql sqlplus


【解决方案1】:
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; 

【讨论】:

    【解决方案2】:

    添加群组。

    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
    

    【讨论】:

      【解决方案3】:

      以这种方式重写,看看它是否给你想要的......

      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; 
      

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 2016-07-08
        • 1970-01-01
        • 1970-01-01
        • 2017-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        相关资源
        最近更新 更多