Запустить другой выбор, если предыдущий удовлетворяет условию

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть следующий выбор:

 SELECT
  calories,
  total
FROM user_food
WHERE login = 'blabla'
  AND date >= '2020-11-14'
  AND date < '2020-11-16'
  GROUP BY date
  ORDER BY date
  

Что мне нужно, так это запустить другой оператор выбора, если в текущем выборе удовлетворяет следующему условию:

 calories < ((30 / 100) * total)
  

таблица:

 calories total login    date
 23      50    'www'    '2020-11-12'
 19      36    'abc'    '2020-11-11'
 10      50    'blabla' '2020-11-14'
 13      50    'blabla' '2020-11-15'
  

Другими словами, мне нужно что-то вроде:

     if(SELECT
      calories,
      total
    FROM user_food
    WHERE login = 'blabla'
      AND date >= '2020-11-14'
      AND date < '2020-11-16'
      GROUP BY date
      ORDER BY date) is calories < ((30 / 100) * total)
      THEN (SELECT something)
  

Комментарии:

1. Пожалуйста, предоставьте образцы данных и желаемые результаты в виде табличного текста.

2. Возможно, вам нужно ЛЕВОЕ соединение?

Ответ №1:

То, что вы описываете, часто обрабатывается EXISTS . Однако вы на самом деле не предоставили достаточно информации для предоставления подробного ответа. Но структура примерно такая:

 SELECT <something>
. . . 
WHERE EXISTS (SELECT
              FROM user_food
              WHERE login = 'blabla' AND
                    date >= '2020-11-14' AND
                    date < '2020-11-16' AND
                    calories < ((30.90 / 100) * total) AND
                    -- some sort of correlation clause
              );