1

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

我想找到最低销售价格;即 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:不是单组组函数

为了让语句正确执行,我需要做一些额外的嵌套吗?

4

2 回答 2

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,或者您的数据看起来如何。

于 2013-04-18T16:45:48.563 回答
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)
于 2013-04-18T16:45:41.760 回答