SQL:不是单个组函数....不是GROUP BY表达式

时间:2013-04-18 16:35:53

标签: sql oracle oracle11g aggregate-functions min

我有许多表格,详细说明了商店的客户和销售等。

我想找到最低销售价格;即SQL表达式返回的单个结果。

为了使结果有意义,我还想将customer_sale表与customer表一起加入(以便相关客户也将返回他/她的名字)。

使用以下代码

SELECT CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME, MIN(SALE_PRICE)
FROM CUST_ORDER
INNER JOIN CUSTOMER
ON CUST_ORDER.CUST_ID = CUSTOMER.CUST_ID
GROUP BY CUST_ORDER.CUST_ID
HAVING MIN(SALE_PRICE) = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER GROUP BY CUST_ID)
Oracle 11g中的

会引发以下错误:

  

第1行的错误:ORA-00979:不是GROUP BY表达式

这是有道理的,因为它只返回一个结果。

但是,删除GROUP BY子句会导致dbms抛出以下错误:

SELECT CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME, MIN(SALE_PRICE)
FROM CUST_ORDER
INNER JOIN CUSTOMER
ON CUST_ORDER.CUST_ID=CUSTOMER.CUST_ID
HAVING MIN(SALE_PRICE) = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER)
  

第1行的错误:ORA-00937:不是单组组功能

我需要做一些额外的嵌套才能使语句正确执行吗?

2 个答案:

答案 0 :(得分:2)

如果你真的只是获得整张桌子的分钟,也许就是这样:

SELECT DISTINCT CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME, SALE_PRICE
FROM CUST_ORDER
INNER JOIN CUSTOMER
ON CUST_ORDER.CUST_ID=CUSTOMER.CUST_ID
WHERE SALE_PRICE = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER)

我不确定您是否需要DISTINCT,或者您的数据看起来如何。

答案 1 :(得分:1)

在您的第一个查询中,您似乎还需要另外GROUP BY客户的名字和姓氏,因为您还选择选择它们:

SELECT CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME, MIN(SALE_PRICE)
FROM CUST_ORDER
INNER JOIN CUSTOMER
ON CUST_ORDER.CUST_ID = CUSTOMER.CUST_ID
GROUP BY CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME
HAVING MIN(SALE_PRICE) = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER)