2017-03-04 70 views
0

從以下Produce表,在同一表中只返回非重複行嗎?

FRUITS    PRICE 
Granny Smith Apple $ 10 
Golden Orchard Apple $ 15 
Spotted Banana  $ 20 
Small Banana   $ 15 
Green Pear   $ 25 
Seedless Grapes  $ 10 
Juicy Watermelon  $ 30 

我想回到所有重複的行不包括以下結果集:

FRUITS    PRICE 
Spotted Banana  $ 20 
Green Pear   $ 25 
Juicy Watermelon  $ 30 

我的SQL如下:

SELECT DISTINCT fruits, price 
FROM produce 
WHERE price IN 
    (SELECT DISTINCT price 
    FROM produce); 

我的代碼有效,但它不會產生以上所需的結果集。

編輯:

下面的查詢產生的一列(非重複價),我需要的結果集,但我需要的只是水果的名字列旁邊:

SELECT DISTINCT price 
    FROM produce 
+0

這裏什麼是重複? –

+0

價格10美元和15美元 – 5120bee

回答

1

我相信這會做你想要什麼:

select min(fruit) as fruit, price 
from produce 
group by price 
having count(*) = 1; 

由於having子句將行數限制爲一行的價格,所以min()是該行的值。

如果你有更多的列,那麼你可能會做這種利用窗口函數的更傳統的方式:

select p.* 
from (select p.*, count(*) over (partition by price) as cnt 
     from produce p 
    ) p 
where cnt = 1; 
+0

感謝您的解釋! – 5120bee

0

您需要按價格,而忽略其統計所有這些水果超過1

select p.FRUITS, p.PRICE from produce p 
group by p.PRICE 
having count(p.PRICE)=1; 
+0

@ 5120bee檢查是否有效。 – afrose

+0

'ORA-00979不是一組表達式' – MT0

+0

@afrose - 它不會。 – mathguy