我试图从我的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;
答案 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;