Возвращать уникальные строки на основе определенных критериев

0

Изображение 174551

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

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

Изображение 174551

До сих пор я просто:

SELECT DISTINCT * FROM Food;

Но это, очевидно, все еще возвращает одну из строк, в которой есть "Apple",

  • 1
    Можно сделать несколькими способами. Начните с запроса NOT EXISTS , попробуйте GROUP BY с HAVING и т. Д.
  • 0
    См. Meta.stackoverflow.com/questions/333952/…
Теги:

3 ответа

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

демонстрация

0
SELECT DISTINCT * FROM Food WHERE Fruit NOT IN (SELECT (UNIQUE Fruit) FROM Food WHERE Status = 'Approved');

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

  • 0
    Это бред
-2

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

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

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

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

Источник

  • 0
    Отличная звезда совершенно бессмысленная
  • 0
    Это не бред, потому что строки могут быть идентичными, не все таблицы имеют уникальные первичные ключи. Как в случае с OP.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню