![]() |
AW: SQLite - Select mit mehreren Tabellen
Irgendwie kommt es mir so vor, als wären Subqueries gar nicht möglich :?:
|
AW: SQLite - Select mit mehreren Tabellen
Zitat:
Code:
Dessenungeachtet ist das Mittelwertbilden von Mittelwerten eine Milchmädchenrechnung:
SELECT .... from (select ... from ...) alias X
Auf der Insel Delfipractico befinden sich die Dörfer Villa-Vcl und Villa-Fmx. Die 1000 Bewohner von Villa-Vcl verdienen im Durchschnitt 1 Euro (arme Bauern halt). Die beiden Bewohner von Villa-Fmx verdienen beide jeweils 1000 Euro (sie vermarkten die bäuerlichen Erzeugnisse). Der Durchschnittslohn auf der Insel Delfipractico beträgt also... a: (1000 + 1) / 2 = 500,50 Euro? b: (1000 x 1 + 2 x 1000) / 1002 = 2,99 Euro? c: 1 Euro? (Median) Ganz sicher nicht (a). Je nach konkreter Fragestellung eher (b) oder (c). Das ändert natürlich nichts an der Problematik von Subselects, aber dein Beispiel verwirrt mich, und deshalb mein Einwand. |
AW: SQLite - Select mit mehreren Tabellen
Zitat:
Wer oder was hindert Dich eine einfache Subquery Abfrage zu testen? Es ist doch offensichtlich so, dass iOS Doku zum Thema sqlite nicht sehr verfügbar ist. (was ich sehr seltsam finde- gibt es wenigstens sowas wie eine bekannte sqLite Version unter iOS?) Außerdem gibt es scheinbar nicht viele Leute, die ein entsprechendes System am Start haben und solche Fragen nachvollziehen können. Wie soll auf dieser Grundlage ein unvollständig angegebenes SQL Statement funktionsfähig gemacht werden? Kannst Du aktuell sagen, welcher Teil des Statements überhaupt den Fehler verursacht? |
AW: SQLite - Select mit mehreren Tabellen
Okay, pass auf:
Es soll eine Notenverwaltung + Rechner erstellt werden. Ich habe 3 Tabelle: Noten, Gewichtungen und Schulfächer. Die Tabelle Noten besteht aus den Fremdschlüsseln Subject , Weight und dem Attribut Grade(Float). Jetzt soll der Notenstand aller Fächer berechnet werde, also z.B.:
Code:
Dazu folgende Abfrage:
(Note1*Gewichtung1)+(Note4*Gewichtung1)+(Note6*Gewichtung1)/(Anzahl Noten Pro Gewichtung)+
(Note2*Gewichtung2)+(Note3*Gewichtung2)/(Anzahl Noten Pro Gewichtung)+...
SQL-Code:
Die Exception tritt auf, sobal ich das aüßer Select hinzufüge.
SELECT SUM(tmp) FROM (
SELECT weights.weight, subjects.name, SUM(grades.grade*weights.weight)/COUNT(*))/100 AS tmp FROM grades JOIN subjects ON grades.subject = subjects.recno JOIN weights ON grades.weight = weights.recno GROUP BY weights.weight, subjects.name' ) AS x; |
AW: SQLite - Select mit mehreren Tabellen
Zitat:
Dann ist das ' schonmal falsch. |
AW: SQLite - Select mit mehreren Tabellen
Zudem sind alle Verbesserungen dieses Threads nicht umgesetzt!
Ich würde auch konsequent Aliase verwenden. Die Joinbedingungen sind auch vertauscht.
SQL-Code:
SELECT
1 as Feld, SUM(x.tmp) as tmp FROM ( SELECT w.weight, s.name, SUM(g.grade*w.weight)/COUNT(*))/100 AS tmp FROM grades g JOIN subjects s ON s.recno = g.subject JOIN weights ON w.recno = g.weight GROUP BY w.weight, s.name ) x GROUP BY x.Feld; |
AW: SQLite - Select mit mehreren Tabellen
Hmmm. Scheint so, als ob SQLite wirklich 'SQL light' ist.
Übrigens: Der gewichtete Mittelwert berechnet sich aber eher so: (Note1*g1 + Note2*g2...NoteN*gN)/(g1+g2+...gN) Beispiel: Noten (1,2,3) Gewichte (100,5,1) = (100*1 + 2*5 + 3*1) / (100+5+1) = 113/106 = 1,1 Bei deiner Formel käme aber 113/3 = 39 heraus. Ich denke, man könnte so zum Ziel kommen
Code:
SELECT SUM(grades.grade*weights.weight)/sum(weights.weight) AS averageGrade
FROM grades JOIN subjects ON grades.subject = subjects.recno JOIN weights ON grades.weight = weights.recno |
AW: SQLite - Select mit mehreren Tabellen
Zitat:
Zitat:
Das ist jetzt aber nicht weiter schlimm, muss halt alles weitere in Delphi ausführen, kosten auch nicht soo viel mehr Zeit. Und danke Furtbichler, dass du mein Beispiel verbessert hast. Damit hast du ein weites Problem gelöst ;) |
AW: SQLite - Select mit mehreren Tabellen
Zitat:
An dieser Stelle kann man im Group By statt der Feldnamen höchstens mit den Feldnummern des Select Statements arbeiten. Hier zufällig die "1" als Konstante, entsprechend Feldnummer 1. Das ist zumindest nich nur bei "light" Systemen so. Group by sähe also eher so aus:
Code:
group by 1;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz