根据特定条件返回唯一行

时间:2018-05-23 19:18:34

标签: mysql sql

enter image description here

我需要一个返回不同行的查询,但不会返回任何具有重复水果的行,其中一行是“已批准”。注意:总会有至多两个同名的水果。

例如,理想的结果是:

enter image description here

到目前为止我只是简单地说:

SELECT DISTINCT * FROM Food;

但显然这仍然会返回其中一个拥有水果'Apple'

的行

3 个答案:

答案 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

Demo

答案 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;

Source