SQL Abfrage anpassen

didi577

Bekanntes Mitglied
Hallo,

neues Jahr neue Probleme...

Ich habe hier einen Ausschnitt aus einer MySQL Tabelle. Zu sehen sind 7 Datensätze die 6 Schulungen darstellen. Meine SQL Abfrage gibt aber nur 5 Schulungen aus, da ich in der Abfrage ja doppelte Datumswerte ausblende.
Nur wenn Kurs, Ort, Dozent, Datum identisch darf es als 1 Schulung gezählt werden(siehe ID 395 und 397), alle anderen Kombinatonen sind unterschiedliche Schulungen (z.B. ID 404 und 415).

ID Kurs Ort Dozent Datum
395 1.13. Hildesheim CE 19.12.2016
397 1.13. Hildesheim CE 19.12.2016
404 2.19. Hildesheim WG 21.12.2016
415 1.15. Hildesheim PZ 21.12.2016
421 1.14. Hildesheim UF 23.12.2016
425 1.13. Hildesheim Jhe 29.12.2016
427 1.14. Hildesheim JHe 28.12.2016

Meine Abfrage:
Java:
SELECT ort, COUNT(DISTINCT datum) FROM fragen GROUP BY ort ORDER BY COUNT(DISTINCT datum) desc;

Die Abrage soll ergeben "Hidesheim 6"

Wie muss ich meine Abfrage anpassen?
 

didi577

Bekanntes Mitglied
Würde ich in etwa so machen: HIER.
da ich meine DB umgebaut habe und jetzt die IDs speichere und nicht mehr die Namen muss benannte Abfrage angepasst werden. Ich habe alles probiert aber er zeigt mir immer die IDs statt der Namen. Alle anderen Abfragen habe ich mit INNER JOINS so hinbekommen dass mir die Namen statt der IDs angezeigt werden, nur diese eine nicht...
Java:
"SELECT f.ort AS 'ort', COUNT(*) AS 'Anzahl an Kursen' FROM (SELECT ort FROM fragen GROUP BY kurs, ort, dozent, datum ORDER BY COUNT(*) DESC)"
                       + " f inner join schulaus.orte o on f.ort = o.ort_id GROUP BY ort ORDER BY COUNT(*) DESC LIMIT 3"
ich habe eine Tabelle "orte" in der es die Spalten "ort_id" und "ortsname" gibt. In der Tabelle "fragen" entspricht die Spalte "ort" der Spalte "ort_id" aus der Tabelle "orte". In meiner Auswertung soll die "bezeichnung" und nhicht "ort_id" angezeigt werden.
Wer kann mir helfen?
 

Thallius

Top Contributor
Warum kann es überhaupt zwei Einträge in der Tabelle wo ID Kurs Ort Dozent Datum alle gleich sind? Da liegt doch das eigentliche Problem. Normalisier deine Tabelle doch mal richtig.
 

didi577

Bekanntes Mitglied
ich erfasse hier Fragebögen zu Schulungen. wenn 8 Teilnehmer einen Fragebpgen nach einer Schulung ausfüllen, gibt es 8 Einträge mit identischem Kurs, Ort, Dozent, Datum. ID ist nie gleich. Das besondere an dieser Abfrage ist , dass an einem Ort auch zwei Schulungen an einem Tag stattfinden können (mehrere Räume). Die Auswertung über den Ort genügt mir aber. Die ursprüngliche Abfrage hat das gut gemacht...
 

Thallius

Top Contributor
Trotzdem ist deine Datenbank so nicht ansatzweise normalisiert und deswegen hast du jetzt die ganzen Probleme. Die Schulung gehoert in eine eigene Tabelle und dann darf es auch nur einen Eintrag pro Schulung geben fuer die Teilnehmer gibt es dann eine Tabelle mit einer id auf die Schulung an der sie teilgenommen haben und eine id auf den Teilnehmer. Dann hast du noch eine Tabelle mit Teilnehmern

Generell gilt sobald du irgend eine Information in der Datenbank doppelt speicherst ist die Datenbank nicht mehr normalisiert und fliegt dir irgendwann die Ohren
 

Thallius

Top Contributor
Deine alte abfrage ist übrigens auch schon total schlecht. Subselects benutzt man nur im absoluten Notfall. Diese potenzieren die benötigte Zeit für einen quere. Wenn du z.b. 10000 Datensätze durchsuchst und für jeden einen subselect hast dann durchsuchst du schon 10000x10000 Datensätze.
 

didi577

Bekanntes Mitglied
ich habe folgende Tabellen:
orte
upload_2017-2-15_13-22-24.png
kurse
upload_2017-2-15_13-23-4.png
dozenten
upload_2017-2-15_13-23-52.png
fragen
upload_2017-2-15_13-24-37.png
in der Tabelle Fragen speicher ich die einzeln erfassten Fragebögen. Jede Zeile ein Fragebogen. Hier in den Spalten kurs, ort, dozent, die IDs der jeweiligen Einträge der anderen Tabellen. Ich weis dass das noch nicht das Optimum ist. Aber ich wachse dann an Folgeprojekten...;). Die Datenmenge wird hier auch in einem Bereich bleiben der SQL nicht an seine Grenzen bringt.

Zum eigentlichen Problem zurück...auf der Startseite habe ich eine kleine Quickinfo wo mir die Top 3 Schulungsorte angezeigt werden (wo fanden die meisten Kurse statt). Dafür benötige ich die Abfrage. Momentan zeigt er mir noch die IDs und nicht die Namen.
"SELECT f.ort AS 'ort', COUNT(*) AS 'Anzahl an Kursen' FROM (SELECT ort FROM fragen GROUP BY kurs, ort, dozent, datum ORDER BY COUNT(*) DESC)"
+ " f inner join schulaus.orte o on f.ort = o.ort_id GROUP BY ort ORDER BY COUNT(*) DESC LIMIT 3"
bringt nicht die Namen sondern die IDs. Das knifflige an dieser Abfrage ist dass an einem Tag möglicherweise 2 oder 3 Kurse an einem Ort stattfinden.
 

Thallius

Top Contributor
Überlege doch einfach mal die Abhängigkeiten und erstelle daraufhin deine Tabellen neu....

Das Datum gehört doch wohl eher in den Kurs und nicht in den Fragebogen oder? Land gehört ja wohl eher zum Ort oder? Kurs, Ort, Dozent haben im Fragebogen überhaupt nichts zu suchen....

Du hast Kurse, Orte, Dozenten und Fragebögen (Fragen klingt hier falsch finde ich)

Jeder Kurs kann nun einen oder mehrere Orte, Dozenten und Fragebögen haben. Also brauchst du Relationstabellen.

z.B. xkursdozent bestehend aus kursid und dozentid. Dann brauchst du eine Tabelle xkursort bestehend aus kursid und ortid. und dann brauchst du noch eine tabelle xfragebogenkurs mit jede einer fragebogen und einer kurs id. Damit brauchst du in deiner Fragebogentabelle keinen kurs, ort, dozent mehr.

Die Abfrage wird dann mit ein paar JOINS sehr einfach und performant werden.
 

didi577

Bekanntes Mitglied
habe die Abfrage hinbekommen:
Java:
"SELECT f.ortsname AS 'ort', COUNT(*) AS 'Anzahl an Kursen' FROM (SELECT ortsname FROM schulaus.fragen f INNER JOIN schulaus.orte o ON f.ort = o.ort_id GROUP BY kurs, ort, dozent, datum ORDER BY COUNT(*) DESC)"
                       + " f GROUP BY ort ORDER BY COUNT(*) DESC LIMIT 3"
Merci ;)
 

didi577

Bekanntes Mitglied
ich muss dazu sagen dass die Tabellen orte, kurse, dozenten reine Stammdaten Tabellen sind. aus denen befülle ich comboboxen bei der Erfassung der Fragebögen. Die je Fragebogen ausgewählten Stammdaten speicher ich dann in der Tabelle fragen. Für Bewegungsdaten hatte ich nur die Tabelle fragen vorgesehen. das Feld land ist zB ein Wert der aus dem Fragebogen kommt den die Teilnehmer also auf dem Papier ankreuzen so wie ca. 13 weitere Fragen mit radiobuttons
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
L If Abfrage Java Basics - Anfänger-Themen 4
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
B Automatisierte Ausgabe (Schleife, If-Abfrage?) Java Basics - Anfänger-Themen 24
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
S Interaktive Abfrage, Hilfe mit Schleifen! Java Basics - Anfänger-Themen 6
P Amazon SQS abfrage Java Basics - Anfänger-Themen 1
Marlena Bauer IBAN generieren (Deutschland) aus Abfrage von BLZ und Kontonummer? Java Basics - Anfänger-Themen 31
M Abfrage j/n und Bildschirm löschen Java Basics - Anfänger-Themen 3
S Und-Abfrage mit mehreren Ungleich-Operatoren Java Basics - Anfänger-Themen 17
O if Abfrage erkennt String nicht Java Basics - Anfänger-Themen 1
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
N Bedinugng If-Abfrage wird nie erfüllt Java Basics - Anfänger-Themen 4
L boolean-Abfrage enumeration Java Basics - Anfänger-Themen 3
Y Methoden Wie kann ich eine if-Abfrage bei Setters bauen? Java Basics - Anfänger-Themen 6
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
F If Abfrage gibt falsches Ergebnis.... Java Basics - Anfänger-Themen 6
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
C Javafunktion zur Abfrage eines Quellcodes Java Basics - Anfänger-Themen 15
A JOPtionPaneOptionDialog Abfrage welcher Button gedrückt wurde? Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
G if Abfrage: Nicht jeder Fall berücksichtigt Java Basics - Anfänger-Themen 2
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
S If Abfrage nur mit bestimmter Initialisierung? Java Basics - Anfänger-Themen 8
Z Boolean Abfrage in einer for each Schleife Java Basics - Anfänger-Themen 2
deatzi Variable aus If Abfrage später nutzen Java Basics - Anfänger-Themen 4
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
S Backspace Abfrage funktioniert nicht Java Basics - Anfänger-Themen 4
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
G Passwort und Passwort wiederholen in if-Abfrage vergleichen Java Basics - Anfänger-Themen 15
P Altklausur: Abfrage der Summe Java Basics - Anfänger-Themen 9
N Methoden Attribut Abfrage eines anderen Objektes Java Basics - Anfänger-Themen 36
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
H For-Schleife innerhalb If-Abfrage? Java Basics - Anfänger-Themen 3
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
O Datentypen Volle 16 Bit eines Short für flags Abfrage nutzen Java Basics - Anfänger-Themen 11
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
S Input/Output Programm läuft nach input-Abfrage nicht weiter. Java Basics - Anfänger-Themen 2
M Variablen Eine etwas andere if Abfrage ! Java Basics - Anfänger-Themen 10
H if-Abfrage, ungleich und falscher true Wert? Java Basics - Anfänger-Themen 11
F Ja Nein Abfrage und andere Probleme Java Basics - Anfänger-Themen 5
OlafHD Fehler Bei der if Abfrage Java Basics - Anfänger-Themen 5
quecksilver if-Abfrage in main ausführen Java Basics - Anfänger-Themen 4
D if-Abfrage Java Basics - Anfänger-Themen 12
J Abfrage für Programmwiederholung Java Basics - Anfänger-Themen 2
K Alternative zur If-Abfrage Java Basics - Anfänger-Themen 3
M Java als Webanwendung mit Datenbank abfrage Java Basics - Anfänger-Themen 3
D Abfrage ob Variableninhalt korrekt Java Basics - Anfänger-Themen 5
W Vergleich mit If-Abfrage nur für Zahlen bis 07 möglich - Warum? Java Basics - Anfänger-Themen 7
D Operatoren IF Abfrage liefert falsches Ergebnis Java Basics - Anfänger-Themen 4
X Ja nein abfrage? Java Basics - Anfänger-Themen 9
A Erste Schritte Problem bei meiner if-Abfrage! Java Basics - Anfänger-Themen 5
M Enum-Variabel-Abfrage funktioniert nicht? Java Basics - Anfänger-Themen 2
S Java Counter: nur 1 mal hochzählen auch wenn Abfrage mehrmals zutrifft. Java Basics - Anfänger-Themen 1
E Erste Schritte [Noob-Frage] Meine If-Abfrage macht nicht, was sie soll... Java Basics - Anfänger-Themen 2
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
A Key Event - Abfrage von 2 gedrückten Tasten Java Basics - Anfänger-Themen 6
T Klasse für Google-Abfrage Java Basics - Anfänger-Themen 9
Z If abfrage - Minimum 0 Java Basics - Anfänger-Themen 9
J Abfrage versetzen Java Basics - Anfänger-Themen 2
D Methoden Abfrage ob ein Wert bereits vorhanden ist Java Basics - Anfänger-Themen 1
thet1983 if() Abfrage Java Basics - Anfänger-Themen 2
A charAt(x)-Abfrage lässt bei Strings<x das Pgrogramm abstürzen. Kann man das verhindern? Java Basics - Anfänger-Themen 4
Uzi21 if - else Abfrage Java Basics - Anfänger-Themen 6
T Index-Abfrage von Pi Java Basics - Anfänger-Themen 5
H Erste Schritte If Abfrage Java Basics - Anfänger-Themen 3
B If Abfrage mit Passwort und Username Java Basics - Anfänger-Themen 2
U einlesen, abfrage Java Basics - Anfänger-Themen 25
T SQL Abfrage Läuft nicht Java Basics - Anfänger-Themen 5
N Probleme mit ActionListener und Logischer Abfrage Java Basics - Anfänger-Themen 4
F Erste Schritte IF-Abfrage fehlerhaft Java Basics - Anfänger-Themen 9
O Downloaden: Trotz If Abfrage wird Datei heruntergeladen Java Basics - Anfänger-Themen 2
D jProgressBar soll bei 100% sein wenn sql Abfrage inkl. jTable schreiben fertig ist... Java Basics - Anfänger-Themen 5
H if-Abfrage double wert Java Basics - Anfänger-Themen 5
M Erstes Prog. OS Abfrage Java Basics - Anfänger-Themen 9
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
B Boolean abfrage Java Basics - Anfänger-Themen 3
D Variablen Rücksprung nach If Abfrage Java Basics - Anfänger-Themen 16
T If- Abfrage Java Basics - Anfänger-Themen 8
P Taschenrechner , IF-Abfrage Java Basics - Anfänger-Themen 12
D if-Abfrage Java Basics - Anfänger-Themen 6
G Einfache if-Abfrage der Main-Argumente Java Basics - Anfänger-Themen 3
C If abfrage zu getBackground Java Basics - Anfänger-Themen 2
T abfrage eines Integer Array s Java Basics - Anfänger-Themen 5
feardorcha boolean array false - true - Abfrage Java Basics - Anfänger-Themen 10
G Adminrechte abfrage Java Basics - Anfänger-Themen 5
S Abfrage Objekt-Array nach Datentypen Java Basics - Anfänger-Themen 6
R If-Abfrage, || funktioniert nicht Java Basics - Anfänger-Themen 4
S TabbedPane: nach Abfrage oldTab selektieren Java Basics - Anfänger-Themen 5
B Abfrage mittels Variable vereinfachen Java Basics - Anfänger-Themen 6
C Treffer Abfrage Java Basics - Anfänger-Themen 19
M nach jar export keine db abfrage möglich Java Basics - Anfänger-Themen 2
T Datenbank Abfrage Exception Null Java Basics - Anfänger-Themen 2
J Erste Schritte Im Tante-Emma-Laden mehrere Artikel kaufen mit if-Abfrage Java Basics - Anfänger-Themen 24
I Threads If-Abfrage vor kritischem Abschnitt Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben