Значение фильтра с условной логикой с SQL

#sql #amazon-redshift

Вопрос:

У меня есть таблица, как показано ниже:

 store       city         status
  a        new york        t
  b        paris           f
  b        london          t 
  c        lisbon          f
 

Я хотел бы выбрать магазин, когда он имеет значение ТОЛЬКО «f». Если в магазине есть и «f», и «t», то это не считается. Желаемый Результат:

 store            status
  c                f
 

Это то, что я пробовал, но я все еще не получил желаемого результата:

 SELECT store
FROM (
      SELECT store, city,
             CASE 
                 WHEN status = 'f' THEN 1
                 WHEN status = 't' THEN -1 
             END AS status
      FROM table) AS t
GROUP BY store 
HAVING SUM(status) > 1
 

Любые предложения будут высоко оценены!

Ответ №1:

Вы можете использовать агрегацию и having :

 select store
from t
group by store
having min(status) = 'f' and max(status) = 'f';