我需要一个返回不同行的查询,但不会返回任何具有重复水果的行,其中一行是“已批准”。注意:总会有至多两个同名的水果。
例如,理想的结果是:
到目前为止我只是简单地说:
SELECT DISTINCT * FROM Food;
但显然这仍然会返回其中一个拥有水果'Apple'
的行答案 0 :(得分:1)
您可以对所需的结果集(如
)使用某些条件聚合select fruit, min(status)
from demo
group by fruit
having sum(status = 'Approved') = 0
and sum(status = 'Bought') > 0
或只使用select fruit, 'Bought' as status
答案 1 :(得分:0)
SELECT DISTINCT * FROM Food WHERE Fruit NOT IN (SELECT (UNIQUE Fruit) FROM Food WHERE Status = 'Approved');
尝试此查询。
答案 2 :(得分:-1)
我认为你可以用不同的方式解决这个问题吗?要获得相同的结果,您可以添加WHERE
子句,例如:
SELECT DISTINCT * FROM Food WHERE Status = 'Bought';
您还可以更改数据模型,以便更新水果的状态,而不是为同一个水果添加另一条记录(如果这符合应用程序的目的)。
如果您想维护架构并获得相同的结果,我相信您可以这样做:
SELECT DISTINCT on (Fruit) Fruit, Status FROM Food ORDER BY Fruit, Status ASC;