我有许多表格,详细说明了商店的客户和销售等。
我想找到最低销售价格;即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:不是单组组功能
我需要做一些额外的嵌套才能使语句正确执行吗?
答案 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)