2013-04-18 26 views
1

我有許多表格,詳細說明一個店的客戶和銷售等方面的SQL:沒有哪一個組功能....不是一個GROUP BY表達式

我想找到的最低出售價格;即由SQL表達式返回的單個結果。

爲了使結果有意義,我還想要將customer_sale表與客戶表一起加入(以便相關客戶也將返回其姓名)。

使用在Oracle 11g中下面的代碼

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) 

引發以下錯誤:

ERROR at line 1: ORA-00979: not a GROUP BY expression

這是有道理的,因爲它是隻返回一個結果。

但是刪除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) 

ERROR at line 1: ORA-00937: not a single-group group function

有一些額外的嵌套,我必須做的陳述正確執行?

回答

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與否,或如何您的數據看起來。

+0

似乎現場工作! – user137263

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) 
+0

謝謝,但生成此錯誤「第6行的錯誤: ORA-01427:單行子查詢返回多個行」:P – user137263

+0

我看到...您將需要從SELECT MIN中刪除組(SALE_PRICE)FROM CUST_ORDER GROUP BY CUST_ID。我會更新我的答案以反映這一點。 –

+0

這個最新版本看起來可能有效......總是有利於OP做出選擇! –