Я использую SQLite в приложении, которое я разрабатываю.
Я пытаюсь выполнить довольно сложный запрос (сложный для меня!), И я получил базовые результаты, которые мне нужны, но я застрял при преодолении последнего препятствия.
В настоящее время у меня есть этот запрос, который делает то, что мне нужно ...
SELECT SUM(activity)
FROM activities
WHERE activity_id IN(SELECT name_id FROM foods GROUP BY name_id HAVING SUM(points) > 20);
Мне нужно добавить еще одну часть в этот запрос, но здесь он немного усложнился. Есть три таблицы .... даты, продукты питания, действия и мне нужно найти сумму результирующего набора, который содержит минимальное число между двумя значениями из двух разных таблиц, если определенное утверждение верно.
В основном ..
SELECT SUM(total) FROM (SELECT MIN(value from table1 which is determined by a value in table2, value from table3) AS total
FROM table3
WHERE value from table3 is contained in a result set from table1);
Приведенный ниже запрос - это то, что я придумал, и он работал бы, если бы не было никакого синтаксиса (смеется!). Это не работает, но я просто хотел показать это, чтобы лучше понять, что я пытаюсь сделать.
SELECT SUM(activity_amount) FROM (SELECT min((SELECT SUM(points) - 20 FROM foods WHERE name_id IN(SELECT pk FROM dates WHERE weekly=1) GROUP BY name_id), activity) AS activity_amount
FROM activities
WHERE activity_id IN(SELECT name_id FROM foods GROUP BY name_id HAVING SUM(points) > 20));
Проблема с первым значением в MIN()
....
SELECT SUM(points) - 20 FROM food WHERE name_id IN(SELECT pk FROM dates WHERE weekly=1) GROUP BY name_id
Это утверждение дает более одного значения, но хотя мне нужно, чтобы эти значения сравнивались с другими в MIN()
, мне нужно только одно по одному за раз ... не как целый набор.
Как я могу заставить работать что-то вроде вышеупомянутого запроса?
РЕДАКТИРОВАТЬ ... некоторые примеры таблиц, чтобы лучше помочь. Спасибо jellomonkey и hainstech
Table#1(dates)
CREATE TABLE dates (pk INTEGER PRIMARY KEY, date INTEGER, weekly INTEGER)
pk date weekly
1 05062009 1
2 05072009 1
3 05082009 2
Table #2(foods)
CREATE TABLE foods (pk INTEGER PRIMARY KEY, food VARCHAR(64), points DOUBLE, name_id INTEGER)
pk food points name_id
1 food1 12.0 1
2 food2 9.0 1
3 food3 5.0 1
4 food4 15.0 2
5 food5 14.0 2
6 food6 12.0 3
Table#3(activities)
CREATE TABLE activities (pk INTEGER PRIMARY KEY, activity DOUBLE, activity_id INTEGER)
pk activity activity_id
1 5.0 1
2 4.0 1
3 2.0 2
4 4.0 3
С этим ex и запросом из моего исходного поста (тот, который не работает), я бы искал набор результатов, содержащий одно значение ..8.0
MIN (26,0-20, 9,0) = 6,0
MIN (29,0-20, 2,0) = 2,0
6,0 + 2,0 = 8,0
Надеюсь, это поможет!