Возвращать уникальные строки на основе определенных критериев - PullRequest
0 голосов
/ 23 мая 2018

enter image description here

Мне нужен запрос, который будет возвращать отдельные строки, но не будет возвращать строки с дублирующимися плодами, где одна из строк «Одобрена».Примечание: всегда будет не более двух плодов с одинаковым именем.

Например, идеальным результатом будет:

enter image description here

То, что у меня есть до сих пор, просто:

SELECT DISTINCT * FROM Food;

Но это, очевидно, все еще возвращает одну из строк, в которых есть фрукт 'Apple'

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Я думаю, вы могли бы решить эту проблему другим путем, возможно?Чтобы получить тот же результат, вы можете добавить предложение WHERE, например:

SELECT DISTINCT * FROM Food WHERE Status = 'Bought';

Вы также можете изменить модель данных так, чтобы статус фрукта обновлялся, а не добавлялся другой.запись для того же фрукта (если это соответствует целям приложения).

Если вы хотите сохранить схему и получить то же самое, я думаю, вы можете сделать: SELECT DISTINCT on (Fruit) Fruit, Status FROM Food ORDER BY Fruit, Status ASC;

Источник

0 голосов
/ 24 мая 2018

Вы можете использовать некоторую условную агрегацию для желаемого набора результатов, например

select fruit, min(status)
from demo
group by fruit
having sum(status = 'Approved') = 0
and sum(status = 'Bought') > 0

или просто использовать select fruit, 'Bought' as status

Демо

0 голосов
/ 23 мая 2018
SELECT DISTINCT * FROM Food WHERE Fruit NOT IN (SELECT (UNIQUE Fruit) FROM Food WHERE Status = 'Approved');

Попробуйте этот запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...