SQL Abfrage benötige euer Fachwissen
Servus,
habe hier ein Problem mit einer SQL Abfrage und komme nicht weiter.
Also die Aufgabe:
Wir haben eine SQL Datenbank mit mehreren Tabellen.
Ich soll eine Abfrage gestalten, die mir den Gesamtwert des Buchbestands anzeigt.
Allerdings muss ich das ganze Variabel halten, d.h. wenn wir von einem buch 2,3 oder 5 exemplare haben, muss das mit in das Ergebnis aufgenommen werden.
Hier mal die Frage wie sie in der Aufgabe steht:
Der Gesamtwert des Buchbestandes soll ausgegeben werden
So wir benötigen 2 Tabellen zur auswertung und zwar die Tabelle "buecher" und die Tabelle "buchexemplar".
buecher
- ISBN
- Kaufpreis
buchexemplar
- ISBN
- Exemplarnummer
Wie bekomm ich das hin?
Mit LEFT JOIN die ISBN's verbinden nehme ich an?
Aber wie multipliziere ich den Kaufpreis jedes einzelnen Buches mit seiner Anzahl und rechne das zum schluss zusammen?
Hoffe das ist halbwegs verständlich
MfG
L0c4lh0sT
habe hier ein Problem mit einer SQL Abfrage und komme nicht weiter.
Also die Aufgabe:
Wir haben eine SQL Datenbank mit mehreren Tabellen.
Ich soll eine Abfrage gestalten, die mir den Gesamtwert des Buchbestands anzeigt.
Allerdings muss ich das ganze Variabel halten, d.h. wenn wir von einem buch 2,3 oder 5 exemplare haben, muss das mit in das Ergebnis aufgenommen werden.
Hier mal die Frage wie sie in der Aufgabe steht:
Der Gesamtwert des Buchbestandes soll ausgegeben werden
So wir benötigen 2 Tabellen zur auswertung und zwar die Tabelle "buecher" und die Tabelle "buchexemplar".
buecher
- ISBN
- Kaufpreis
buchexemplar
- ISBN
- Exemplarnummer
Wie bekomm ich das hin?
Mit LEFT JOIN die ISBN's verbinden nehme ich an?
Aber wie multipliziere ich den Kaufpreis jedes einzelnen Buches mit seiner Anzahl und rechne das zum schluss zusammen?
Hoffe das ist halbwegs verständlich
MfG
L0c4lh0sT
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 129205
Url: https://administrator.de/contentid/129205
Ausgedruckt am: 25.11.2024 um 15:11 Uhr
15 Kommentare
Neuester Kommentar
buecher
- ISBN
- Kaufpreis
buchexemplar
- ISBN
- Exemplarnummer
ist ja auch nirgendwo ne anzahl mit angegeben oder soooll "Exemplarnummer" die anzahl darstellen... wenn ja dann ist die bezeichnung etwas dumm :D
du kannst auch im sum zwei felder multiplizieren ....
da gibt es aber 1.000.000 beispiele wenn du mal googelst ... also wenn man etwas mit denkt, dann kann man diese auch umsetzten :D
http://www.sql-und-xml.de/server-daten/sql-befehle/
falls du zu faul zum suchen bist ;)
- ISBN
- Kaufpreis
buchexemplar
- ISBN
- Exemplarnummer
ist ja auch nirgendwo ne anzahl mit angegeben oder soooll "Exemplarnummer" die anzahl darstellen... wenn ja dann ist die bezeichnung etwas dumm :D
du kannst auch im sum zwei felder multiplizieren ....
da gibt es aber 1.000.000 beispiele wenn du mal googelst ... also wenn man etwas mit denkt, dann kann man diese auch umsetzten :D
http://www.sql-und-xml.de/server-daten/sql-befehle/
falls du zu faul zum suchen bist ;)
Moin L0c4lh0sT,
drei Anmerkungen zu deiner Query.
1. Wenn die Query das richtige Ergebnis liefert, dann ist die "Länge" des formulierten Statements dritt- oder viertrangig.
Wenn überhaupt etwas von Bedeutung ist, dann die gewählten Zugriffspfade, die Performanz--> alles, was du über ein EXPLAIN untersuchen kannst.
2. Ein LEFT JOIN in dem untersuchten Zusammenhang kann nur unnötig Zeit kosten, da (soweit uns bekannt ist) keine RIs definiert sind, die sicherstellen, dass in der Buchautor nur ISBNs und Autorennr'n erfasst sind, die es auch in Buechern und Autoren gibt.
Möglicherweise hast du ja 2000 Bücher in der Buechertabelle und 5000 Autoren in der Autoren-Tabelle, die jeweils nichts miteinander zu tun haben.
Und bei dem, was du betrachtest interessieren nur die echten JOINs (ohne LEFT)
3. Ein HAVING Count(1) > '1' ist Grütze..... eine Anzahl kann niemals einen Zeichenwert "Ziffer 1" ergeben.
Also belass es bei
[ungetestet]
Und wenn du da etwas tunen willst-...
--> dann nur wenn es ein EXPLAIN es nahelegt und nicht weil es mehr 5 Zeilen oder mehr als ein Schlüsselwort SELECT hat.
Grüße
Biber
drei Anmerkungen zu deiner Query.
1. Wenn die Query das richtige Ergebnis liefert, dann ist die "Länge" des formulierten Statements dritt- oder viertrangig.
Wenn überhaupt etwas von Bedeutung ist, dann die gewählten Zugriffspfade, die Performanz--> alles, was du über ein EXPLAIN untersuchen kannst.
2. Ein LEFT JOIN in dem untersuchten Zusammenhang kann nur unnötig Zeit kosten, da (soweit uns bekannt ist) keine RIs definiert sind, die sicherstellen, dass in der Buchautor nur ISBNs und Autorennr'n erfasst sind, die es auch in Buechern und Autoren gibt.
Möglicherweise hast du ja 2000 Bücher in der Buechertabelle und 5000 Autoren in der Autoren-Tabelle, die jeweils nichts miteinander zu tun haben.
Und bei dem, was du betrachtest interessieren nur die echten JOINs (ohne LEFT)
3. Ein HAVING Count(1) > '1' ist Grütze..... eine Anzahl kann niemals einen Zeichenwert "Ziffer 1" ergeben.
Also belass es bei
SELECT buecher.ISBN, buecher.Titel, autoren.Name, autoren.vorname
FROM buecher, buchautor, autoren
WHERE buecher.ISBN = buchautor.ISBN
AND buchautor.autorennr = autoren.autorennr
AND Buchautor.isbn IN (
SELECT buchautor.ISBN
FROM buchautor
GROUP BY buchautor.ISBN
HAVING Count(1) > 1
)
ORDER BY buecher.Titel
Und wenn du da etwas tunen willst-...
--> dann nur wenn es ein EXPLAIN es nahelegt und nicht weil es mehr 5 Zeilen oder mehr als ein Schlüsselwort SELECT hat.
Grüße
Biber
Moin L0c4lh0sT,
hmmm, soweit meine SQL-Kenntnisse reichen werden zwei SELECTs erforderlich sein, denn um eine Aggregierung (SELECT..GROUP BY) kommst du nicht herum.
Und ein weiteres SELECT muss dieses Ergebnis mit den Detailinfos aus den anderen beiden Tabellen verbinden... alles andere wäre für mich nicht erklärlich.
Von daher bin ich auf die Lösung dieses Rätsels genauso gespannt wie du.
Grüße
Biber
hmmm, soweit meine SQL-Kenntnisse reichen werden zwei SELECTs erforderlich sein, denn um eine Aggregierung (SELECT..GROUP BY) kommst du nicht herum.
Und ein weiteres SELECT muss dieses Ergebnis mit den Detailinfos aus den anderen beiden Tabellen verbinden... alles andere wäre für mich nicht erklärlich.
Von daher bin ich auf die Lösung dieses Rätsels genauso gespannt wie du.
Grüße
Biber
Moin,
solche Aufgaben sollte man genau durchlesen: die Autoren sind doch in der Abfrage gar nicht verlangt, sondern nur die Bücher, die mehrere Autoren besitzen. Also kann man die Autorendaten getrost rauslassen und einfach gruppieren, somit reicht ein Select. Da ich hier aber keine Schulaufgaben lösen will, überlasse ich die Ausformulierung der Abfrage dem geneigten Leser
Gruß, Mad Max
solche Aufgaben sollte man genau durchlesen: die Autoren sind doch in der Abfrage gar nicht verlangt, sondern nur die Bücher, die mehrere Autoren besitzen. Also kann man die Autorendaten getrost rauslassen und einfach gruppieren, somit reicht ein Select. Da ich hier aber keine Schulaufgaben lösen will, überlasse ich die Ausformulierung der Abfrage dem geneigten Leser
Gruß, Mad Max