仅返回同一表中的非重复行?

时间:2017-03-04 23:43:06

标签: sql oracle select distinct

从以下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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您需要按价格分组,并忽略所有数量超过1的水果

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