SQL错误ORA-00979“不是按表达式分组”,但我无法弄清group-by语句出了什么问题

时间:2019-06-12 12:10:01

标签: sql oracle

我试图从我的sales_purchases表中获取所有'sp_saleprice'记录,仅当负责这些记录的sales_person在'sp_sup'中不存在(即他们是主管)时。 但是,在运行代码时,我始终收到以下错误信息……

Error report -
SQL Error: ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:

我不明白为什么,因为我有一个GROUP BY语句。

这里是实体关系模型 https://i.imgur.com/2yNxDmb.png

SELECT p.sp_id, p.sp_fname, p.sp_lname, sp.sp_invoice,
'$' || to_char (MAX (sp_saleprice), 'FM999999999.99') "Max",
'$' || to_char (MIN (sp_saleprice), 'FM999999999.99') "Min",
'$' || to_char (SUM (sp_saleprice), 'FM999999999.99') "Total",
'$' || to_char (MEDIAN (sp_saleprice), 'FM999999999.99') "Median",
COUNT(sp_saleprice) AS AMOUNT
FROM sales_purchases sp, sales_persons p
WHERE sp.sp_id = p.sp_id
    AND sp_sup IN (
        SELECT sp_sup
        FROM sales_persons p
        WHERE sp_sup IS NULL)
GROUP BY p.sp_id, p.sp_fname, p.sp_lname, p.sp_sup;

1 个答案:

答案 0 :(得分:0)

您的查询选择时不汇总列:

p.sp_id, p.sp_fname, p.sp_lname, sp.sp_invoice

但是您的GROUP BY在列中

p.sp_id, p.sp_fname, p.sp_lname, p.sp_sup

这些列表中的最后一个是不同的。

  

我期望获得sales_purchases的所有销售记录,其中sales_persons中的销售人员没有分配的“ sp_sup”(主管),这意味着他们本身就是主管。当我运行查询时,我应该有十个结果

AND sp_sup IN ( SELECT sp_sup FROM sales_persons p WHERE sp_sup IS NULL )

将要排除所有行,因为嵌套选择始终将返回NULL值。

为什么不只使用:

SELECT p.sp_id,
       p.sp_fname,
       p.sp_lname,
       sp.sp_invoice,
       '$' || to_char (MAX (sp_saleprice), 'FM999999999.99') "Max",
       '$' || to_char (MIN (sp_saleprice), 'FM999999999.99') "Min",
       '$' || to_char (SUM (sp_saleprice), 'FM999999999.99') "Total",
       '$' || to_char (MEDIAN (sp_saleprice), 'FM999999999.99') "Median",
       COUNT(sp_saleprice) AS AMOUNT
FROM   sales_purchases sp
       INNER JOIN sales_persons p
       ON ( sp.sp_id = p.sp_id )
WHERE  sp_sup IS NULL
GROUP BY p.sp_id, p.sp_fname, p.sp_lname, sp.sp_invoice;