SQL错误ORA-00979“不是GROUPBY表达式”,但我无法找出GROUPBY语句的错误

SQL错误ORA-00979“不是GROUPBY表达式”,但我无法找出GROUPBY语句的错误,sql,oracle,Sql,Oracle,我正试图从我的sales\u purchases表中获取所有的“sp\u saleprice”记录,只有负责这些记录的销售人员在“sp\u sup”中没有任何记录,即他们是主管。 然而,当我运行代码时,我不断得到以下错误 Error report - SQL Error: ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression" *Cause: *Action: 我不明白为什么,因为

我正试图从我的sales\u purchases表中获取所有的“sp\u saleprice”记录,只有负责这些记录的销售人员在“sp\u sup”中没有任何记录,即他们是主管。 然而,当我运行代码时,我不断得到以下错误

Error report -
SQL Error: ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
我不明白为什么,因为我有一个分组声明

这是实体关系模型


您的查询在不聚合列的情况下选择:

p.sp_id, p.sp_fname, p.sp_lname, sp.sp_invoice
但是你的分组方式在列中

p.sp_id, p.sp_fname, p.sp_lname, p.sp_sup
最后一个在这些列表中是不同的

我本来希望获得sales_persons中的sales_persons没有分配的“sp_sup”主管的sales_采购的所有销售记录,这意味着他们自己就是主管。当我运行查询时,我没有选择任何行作为响应,而我应该有十个结果

将排除所有行,因为嵌套的select将始终返回空值

为什么不直接使用:

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;

您通常按照与所选相同的列进行分组,但设置函数的参数除外。jarlh-谢谢!提示:sp.sp_invoice.Hint:不要在FROM中对逗号列出的表使用旧的隐式联接,而是使用显式联接,这是25年前SQL中引入的标准联接。我已按错误解决了分组问题,但没有得到预期的结果。以下是sales_persons的条目:以下是sales_Purchasing的条目:我希望获得sales_Purchasing的所有销售记录,其中sales_persons中的销售人员没有分配的“sp_sup”主管,这意味着他们自己就是主管。当我运行查询时,我没有选择任何行作为响应,而我应该有十个运行良好的结果。谢谢你为我澄清这一点。
AND sp_sup IN ( SELECT sp_sup FROM sales_persons p WHERE sp_sup IS 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;