開発中のアプリケーションでSQLiteを使用しています。
かなり複雑なクエリ(私のために複雑!)を実行しようとしていて、私が必要とする基本的な結果を得ましたが、最後のハードルを乗り越えることに悩まされています。Min()SQLで複数のテーブルを使用する
私は現在、私はそれが何をする必要があるかないこのクエリを持っている...
SELECT SUM(activity)
FROM activities
WHERE activity_id IN(SELECT name_id FROM foods GROUP BY name_id HAVING SUM(points) > 20);
私はこのクエリに別の部品を追加する必要がありますが、それは私のために少し複雑得ている場所です。 3つのテーブルがあります....日付、食品、活動と私は特定のステートメントが真である限り、2つの異なるテーブルからの2つの値の間の最小数を含む結果セットの合計を見つける必要があります。基本的には
..
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()
で他人と比較するために、これらの値が必要なのかにもかかわらず、私はそれらを一度に1つだけ必要とします...全体のセットとしてではありません。
上記のようなクエリを作成するにはどうすればよいですか?
EDIT ...より効果的に役立ついくつかのサンプルテーブル。おかげで私のオリジナルのポスト(動作しないもの)から、この元とクエリで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
は、私は1つvalue..8.0
MINを含む結果セットを探していることになる(26.0 -20、9.0)= 6.0
MIN(29.0から20、2.0)= 2.0
6.0 + 2.0 = 8.0
私はこのことができます願っています!
あなたはアップタイプでした!少しテーブルの例(可能な限り単純)と少し望ましい結果セット? – jellomonkey
私は例を含めるために自分の投稿を編集しました。ありがとう!! – freddyD