l0c4lh0st
Goto Top

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

Content-ID: 129205

Url: https://administrator.de/contentid/129205

Ausgedruckt am: 25.11.2024 um 15:11 Uhr

-ricardo-
-ricardo- 12.11.2009 um 10:51:23 Uhr
Goto Top
Hmm wenn schon dann ein Inner Join der beiden Tabellen, damit auch jedes Exemplar mit auf genommen wird ...

SELECT SUM(Kaufpreis) as Gesamtwert
FROM buecher INNER JOIN buchexemplar ON buecher.isbn=buchexemplar.isbn ...

So in der art dürfte es klappen ...
L0c4lh0sT
L0c4lh0sT 12.11.2009 um 10:59:29 Uhr
Goto Top
So beachtet die Abfrage aber nicht, dass es mehrere Exemplare geben kann.
Und da hapert es ja gerade.
perseues
perseues 12.11.2009 um 11:17:03 Uhr
Goto Top
Hallo,

Du brauchst etwas im Sinne von (ungetestet):

SELECT sum(buecher.kaufpreis*buchexemplar.exemplarnummer) AS Summe
FROM buecher
JOIN buchexemplar
ON buecher.isbn = buchexemplar.isbn;
GO

Grüße p
-ricardo-
-ricardo- 12.11.2009 um 11:19:29 Uhr
Goto Top
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 ;)
L0c4lh0sT
L0c4lh0sT 12.11.2009 um 11:20:40 Uhr
Goto Top
OK habs jetzt durch viel gefrikkel geschafft.

DIe Abfrage sollte so aussehen:

SELECT SUM(buecher.Kaufpreis * buchexemplar.Exemplarnummer) as GesamtPreis from buecher
Inner Join buchexemplar ON buecher.ISBN = buchexemplar.ISBN
where buecher.ISBN = buchexemplar.ISBN
L0c4lh0sT
L0c4lh0sT 12.11.2009 um 11:21:41 Uhr
Goto Top
Okay doch noch net zu machen^^
Hab noch ne zweite Aufgabe an der ich kläglich scheitere.

Ich soll jetzt alle Bücher anzeigen, die mehr als einen Autor haben.

Dazu benötige ich 3 Tabellen.

buecher
- ISBN
- Titel

buchautor
- ISBN
- AutorenNr

autoren
- AutorenNr
- Vorname
- Nachname

Es sollen also alle Bücher angezeigt werden, die mehr als einen Autor haben.
Die Daten zusammensammeln ist kein Problem.
Aber die Ausgabe bereitet mir schwierigkeiten, da ich nicht weiß wie ich die Abfrage formulieren soll.

Wenn jemand noch ne Idee hat immer her damit
-ricardo-
-ricardo- 12.11.2009 um 12:47:56 Uhr
Goto Top
Dann musst du ja schon eine Abfrage gemacht haben, wenn du die Daten zusammen bekommst?!
L0c4lh0sT
L0c4lh0sT 12.11.2009 um 12:50:04 Uhr
Goto Top
Theoretisch bekomme ich die Daten zusammen^^
Also ich weiß was ich für Werte brauche. Aber leider nicht wie ich das meiner Datenbank sagen soll.
-ricardo-
-ricardo- 12.11.2009 um 13:10:20 Uhr
Goto Top
Sag sie mal mir, weil ich stehe momentan etwas auf dem schlauch :D dann kriegst du vielleicht eine SQL Querry
L0c4lh0sT
L0c4lh0sT 12.11.2009 um 13:27:20 Uhr
Goto Top
Hab jetzt schon ne Abfrage gefunden allerdings eine 2 Teilige. Also 2 mal Select mit drin also etwas unschön.
Wenn jemand möchte kann er das ja zusammenfassen^^

SELECT buecher.ISBN, buecher.Titel, autoren.Vorname, autoren.Nachname From buecher
LEFT JOIN buchautor ON buecher.ISBN = buchautor.ISBN
LEFT JOIN Autoren ON buchautor.AutorenNr = autoren.AutorenNr
Where buchautor.ISBN IN (
SELECT buchautor.ISBN
FROM buchautor
GROUP BY buchautor.ISBN
HAVING Count(1) > '1'
)
ORDER BY buecher.Titel
Biber
Biber 13.11.2009 um 17:16:36 Uhr
Goto Top
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
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
[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
L0c4lh0sT
L0c4lh0sT 14.11.2009 um 01:21:53 Uhr
Goto Top
Danke für deine, wie immer super exakte antwort! Aber....jetzt kommt's!
Ich habe die aufgabe von meinem Ausbilder bekommen, welcher meint dass es mit einem SELECT sein soll.
Aber wie es geht will er mir nicht erklären...

Also wenn jemand noch ne lösung hat ohne 2. select wäre ich sehr dankbar.
Biber
Biber 15.11.2009 um 13:37:02 Uhr
Goto Top
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
MadMax
MadMax 15.11.2009 um 20:28:32 Uhr
Goto Top
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 face-wink

Gruß, Mad Max
L0c4lh0sT
L0c4lh0sT 12.02.2010 um 14:09:35 Uhr
Goto Top
Vielen Dank hab ganz vergessen den Thread als gelöst zu makieren....tja so ist dass wenn einem die User die Bude einrennen^^