【发布时间】:2009-05-03 21:53:39
【问题描述】:
我正在开发的应用程序中使用 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
我希望这会有所帮助!
【问题讨论】:
-
您能输入一个小表格示例(尽可能简单)和一些想要的结果集吗?
-
好的。我编辑了我的帖子以包含一个示例。谢谢!!