#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
);