Ich verwende SQLite in einer Anwendung, die ich entwickle.
Ich versuche, eine ziemlich komplexe Abfrage (komplex für mich!) Auszuführen und ich habe die grundlegenden Ergebnisse, die ich brauche, aber ich bin fest auf über die letzte Hürde zu bekommen.Verwenden mehrerer Tabellen, mehrere Werte mit Min() SQL
Ich habe diese Abfrage derzeit das tut, was ich brauche, es zu tun ...
SELECT SUM(activity)
FROM activities
WHERE activity_id IN(SELECT name_id FROM foods GROUP BY name_id HAVING SUM(points) > 20);
Ich brauche einen anderen Teil auf diese Abfrage hinzuzufügen, aber das ist, wo es ein wenig kompliziert für mich bekommen hat. Es gibt drei Tabellen .... Daten, Lebensmittel, Aktivitäten und ich muss die Summe einer Ergebnismenge finden, die die minimale Zahl zwischen zwei Werten aus zwei verschiedenen Tabellen enthält, solange eine bestimmte Aussage wahr ist.
Grundsätzlich ..
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);
Die folgende Abfrage ist etwas, was ich mit, dass kam funktionieren würde, wenn es keine Syntax überhaupt war (lol!). Das funktioniert nicht, aber ich wollte es nur zeigen, um besser zu verstehen, was ich zu tun versuche.
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));
Das Problem ist, mit dem ersten Wert in der MIN()
....
SELECT SUM(points) - 20 FROM food WHERE name_id IN(SELECT pk FROM dates WHERE weekly=1) GROUP BY name_id
Diese Aussage mehr als ein Wert ergibt, aber auch wenn ich diese Werte tun müssen gegen andere in der MIN()
vergleichen Ich brauche sie nur einzeln, nicht als Ganzes.
Wie kann ich etwas wie die obige Abfrage erhalten, die ich erstellt habe, um zu arbeiten?
EDIT ... einige Beispieltabellen, um besser zu helfen. Dank jellomonkey und 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
Mit dieser ex und Abfrage von meiner ursprünglichen Post (eine, die nicht funktioniert), würde ich für eine Ergebnismenge suchen, die einen 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
ich hoffe, das hilft!
könnten Sie geben! ein kleines Tischbeispiel (so einfach wie möglich) und ein wenig gewünschtes Ergebnisset? – jellomonkey
ok. Ich habe meinen Beitrag bearbeitet, um ein Beispiel hinzuzufügen. Vielen Dank!! – freddyD