Эй, у меня есть 3 таблицы для расчета еды.
CREATE TABLE Meals (
meal_id int,
name text
);
CREATE TABLE Ingredients (
ingredient_id int,
name text,
minamount float,
price float
);
CREATE TABLE Recipe (
meal_id int,
ingredient_id int,
quantitiy float,
ingredientName text
);
Теперь мне нравится находить еду по ингредиентам:
SELECT m.meal_id,
m.name,
r.ingredientName
from meals m
join recipe r on m.meal_id = r.meal_id
join ingredients i on i.ingredient_id = r.ingredient_id
where r.ingredientName = 'meat'
group by m.meal_id
, которые дают мне список вроде:
name, ingredientName
Lasagne, meat
Bolognese, meat
Также мне нравится находить еду по цене, например:
SELECT m.meal_id,
m.name,
SUM(i.price / i.minamount * r.quantity) as mealPrice
from meals m
join recipe r on m.meal_id = r.meal_id
join ingredients i on i.ingredient_id = r.ingredient_id
GROUP BY m.meal_id,
m.name
HAVING mealPrice > 5.0 AND mealPrice < 8.0
, которая дает мне список вроде:
name, mealPrice
Lasagne, 6.5
Bolognese, 7.8
Теперь позвольте мне построить запрос типа
SELECT m.meal_id,
m.name,
r.ingredientName,
SUM(i.price / i.minamount * r.quantity) as mealPrice
from meals m
join recipe r on m.meal_id = r.meal_id
join ingredients i on i.ingredient_id = r.ingredient_id
where r.ingredientName = 'meat'
GROUP BY m.meal_id
r.ingredientName
HAVING mealPrice > 5.0 AND mealPrice < 8.0
Который дает мне список вроде:
name, ingredientName, mealPrice
Lasagne, meat, 1.99
Bolognese, meat, 1.99
Потому что (i.price / i.minamount * r.quanitity) для этого блюда для мяса составляет 1,99
Без «GROUP BY r.ingredientName» он возвращает только одно значение
name, ingredientName, mealPrice
Lasagne, meat, 6.5
Но мне нужен список вроде:
name, ingredientName, mealPrice
Lasagne, meat, 6.5
Bolognese, meat, 7.8
Я действительно действительно новичок в SQL (нужен этот запросв моем API для проекта Android ..), и я не знаю, как создать запрос для этого, нужно ли мне что-то вроде переменной или подзапроса, которого я не знаю ....