Veröffentlicht 25. März 20205 j Hallo liebe Fachinformatiker, Ich hoffe euch geht es den Umständen entsprechend gut und ihr seid alle gesund! Wir haben von unserer Berufsschule für den Ausfalls des Schulblocks Aufgaben in einigen Fächern bekommen, die wir freiwillig bearbeiten können. Da ich derzeit sowieso im Homeoffice bin und nur lerne, habe ich mich entschieden, die Aufgaben zu bearbeiten. Nun zum Problem: Aufgabe lautet: Eine Liste aller Meere und die Anzahl der zugehörigen Flüsse Ich komme leider nur bis zu dem Punkt, wo ich alle Meere anzeigen lassen kann, ohne ein Meer doppelt anzuzeigen mit "select distinct(meer) from fluss;" Ich habe versucht, die Aufgabe durch diesen Befehl zu lösen: select ((distinct(meer) select count (distinct(name)) from fluss; Ist zwar falsch, geht es aber in die richtige Richtung? Habt ihr einige Gedankenanstöße für mich? PS: Das ist das erste Mal, dass wir mit Unterabfragen arbeiten, das Thema sollte eigentlich in diesem Block drankommen, deshalb verzeiht mir wenn ich totalen Unsinn schreibe, bin neu in dem Gebiet Danke im Voraus Whitehammer03
25. März 20205 j Für die Anzahl der Flüsse brauchst du eine Aggregation. Welche Tabellenstruktur ist denn gegeben?
25. März 20205 j Hmm, wenn man eine Tabelle hat, die die Flüsse und das zugehörige Meer, in das der Fluss hineinfließt, beinhaltet, dann braucht man doch keine Unterabfrage. Interessant wäre also schon die Datenstruktur.
25. März 20205 j Autor +-----+----------------------+------------------------+--------+ | FNR | Name | Meer | Laenge | +-----+----------------------+------------------------+--------+ | AJA | Ajan-Jurjach | NULL | 200 | | AMA | Amazonas | Atlantischer Ozean | 6387 | | AMU | Amudarja | NULL | 1415 | | AMR | Amur | Ochotskisches Meer | 2918 | | ANU | Anuwimi | NULL | 560 | | ARG | Argun | NULL | 1620 | | ARK | Arkansas River | NULL | 2334 | | ATB | Atbara | NULL | 1120 | | BAD | Bahr al-Jabal | NULL | NULL | | BAH | Bahr el-Gazal | NULL | 716 | | BAN | Bani | NULL | 430 | | BAR | Baro | NULL | NULL | | BEN | Benue | NULL | 1400 | | BIJ | Bija | NULL | 688 | | BLA | Blauer Nil | NULL | 1783 | | BOM | Bomu | NULL | 280 | | BUS | Busira | NULL | 830 | | CHA | Chatanga | Laptewsee | 1636 | | COL | Colorado River | Pazifischer Ozean | 2700 | | COU | Columbia River | Pazifischer Ozean | 1952 | | CON | Connecticut River | Atlantischer Ozean | 660 | | DAL | Dalaelv | Ostsee | 520 | | DNE | Dnepr | Schwarzes Meer | 2201 | | DON | Don | Asowsches Meer | 1870 | | DOU | Donau | Schwarzes Meer | 2850 | | DRI | Drin | Mittelmeer | 285 | | ELB | Elbe | Nordsee | 1144 | | FUL | Fulda | NULL | 218 | | GAM | Gambia | Atlantischer Ozean | 1120 | | GAR | Garonne | Atlantischer Ozean | 650 | | GEL | Gelber Fluss | Gelbes Meer | 4845 | | GLO | Glomma | Nordsee | 598 | | GOE | Goetaaelv | Ostsee | 93 | | GRO | Grosser Jenissej | NULL | 605 | | HAN | Han | Gelbes Meer | NULL | | HUD | Hudson River | Atlantischer Ozean | 493 | | ING | Ingoda | NULL | 708 | | IRT | Irtysch | NULL | 4248 | | ISC | Ischim | NULL | 2450 | | JAN | Jangtse-Kiang | Ostchinesisches Meer | 6100 | | JEN | Jenissej | Karasee | 4130 | | JOE | Joekulsa a Fjoellum | Europaeisches Nordmeer | 206 | Hab die Tabelle einfach mal kopiert, hoffe das hilft euch weiter
25. März 20205 j gibt es einen hinweis darauf wie die Daten aussehen? generell: hier ist ganz gut erklärt was du mit Subselects alles anstellen kannst: https://www.w3resource.com/sql/subqueries/understanding-sql-subqueries.php Du möchtest die Anzahl von Flüssen aus einer Tabelle mit den Namen der Meere aus einer anderen. Der Grundlegende Aufbau wäre etwa: SELECT feldliste, (Unterabfrage) FROM tabelle
25. März 20205 j Du brauchst keine Unterabfrage und kein Distinct, das ist eine schlichte Aggregation.
25. März 20205 j vor 1 Minute schrieb Whitehammer03: +-----+----------------------+------------------------+--------+ | FNR | Name | Meer | Laenge | +-----+----------------------+------------------------+--------+ | AJA | Ajan-Jurjach | NULL | 200 | | AMA | Amazonas | Atlantischer Ozean | 6387 | in dem Fall hat @Whiz-zarD recht, hier braucht man keine Unterabfragen, das ist mit einem GROUP BY und einem COUNT einfacher zu lösen.
25. März 20205 j Autor Oh okey, danke für den Hinweis.. da wir uns zuvor eine kleine pdf zu unterabfragen durchlesen mussten, dachte ich, man müsse es auch mit solchen Befehlen lösen.. select distinct(meer),count (distinct(name)) from fluss ; So sieht mein Befehl nun aus, ist zwar noch nicht ganz fertig, aber ich denke ich bin auf dem richtigen Weg? Bearbeitet 25. März 20205 j von Whitehammer03
25. März 20205 j Ist dir eigentlich klar, was DISTINCT macht? Bei uns gab es mal einen Spruch: Wer mit Distinct arbeitet, hat schon vorher was falsch gemacht (oder so ähnlich) Bearbeitet 25. März 20205 j von KeeperOfCoffee
25. März 20205 j Schaue dir noch mal an, wie DISTINCT funktioniert und dann guck dir noch mal die Antwort von @_n4p_ an.
25. März 20205 j Autor Durch Distinct lasse ich mir doppelte Datensätze nicht anzeigen, oder liege ich falsch? Aber ich glaube ich habe den Befehl nun select meer,count(name) from fluss group by meer; jedoch stört mich hier, dass NULL auch in der Spalte Meer angezeigt wird... das müsste ich noch irgemdwie hinkriegen..
25. März 20205 j Das auch NULL in der Spalte der Meere auftritt ist erstmal korrekt, denn es gibt nach deinen Beispieldaten eben auch Flüsse mit meer=NULL. Wenn man die Meere und die Anzahl der in sie mündenden Flüsse sucht, kann man das per where ausfiltern.
25. März 20205 j Autor select meer,count(name) from fluss where meer is not NULL group by meer ; Danke Leute, Befehl ist nun korrekt und vollständig
25. März 20205 j Autor Hänge nun 3 Aufgaben später wieder fest. Es sollen nur die Meere aufgelistet werden, in die mehr als 5 Flüsse münden. mein Befehl: select meer,count(name) from fluss where count(name) > 5 group by meer; Rein von der Logik her passt das mMn, wahrscheinlich ist einfach nur ne Kleinigkeit an der Formulierung falsch..ich komme aber einfach nicht drauf -.-
25. März 20205 j hier kannst du jetzt auch gern mit der Unterabfrage loslegen select sub.meer from(select ....) as sub where sub.anzahl>5; Bearbeitet 25. März 20205 j von MartinSt
25. März 20205 j Autor Habe es mit Having gelöst, klappt! Mit Unterabfragen muss ich aber jetzt in der nächsten Aufgabe loslegen, obwohl es theoretisch auch ohne gehen würde, jedoch sollen wir hier unterabfragen verwenden. Aufgabe: Erstellen Sie eine Liste aller Länder in Europa. (Hinweis: Verwenden Sie einen Subselect zur Abfrage des KNR Werts für den Kontinent). Kann man hier überhaupt eine Unterabfrage verwenden? Dafür dürfte die Abfrage doch nur max 1 Wert ausliefern dürfen, oder nicht ? Hier wären es ja aber viel mehr als nur 1. Tabelle: +------+--------------------------------+------+-----------+----------+----------+ | LNR | Name | KNR | Einwohner | Flaeche | HauptONR | +------+--------------------------------+------+-----------+----------+----------+ | A | ?ûsterreich | EU | 8.13 | 83845 | WIEN | | AF | Afghanistan | AS | 25.84 | 647497 | KABUL | | AL | Albanien | EU | 3.49 | 28748 | TIRANA | | AN | Andorra | EU | 0.07 | 468 | ANDORR | | AC | Antigua und Barbuda | NA | 0.07 | 442 | SAINTJ | | AUS | Australien | AU | 19.17 | 7686420 | CANBER | | B | Belgien | EU | 10.24 | 30510 | BRUESS | | BB | Barbados | NA | 0.27 | 431 | BRIDGE | | UV | Burkina Faso | AF | 11.95 | 274000 | OUAGAD | | BG | Bulgarien | EU | 8.89 | 110994 | SOFIA | | BH | Belize | NA | 0.17 | 249183 | BELMOP | | BHU | Bhutan | AS | 1.45 | 47000 | THIMBU | Mit dem Befehl Select Name from land where KNR="EU"; würde es gehen.. keine Ahnung warum der Lehrer es so unnötig kompliziert machen will ^^ Bearbeitet 25. März 20205 j von Whitehammer03
25. März 20205 j Du kannst bspw. per Unterabfrage den Kontinent von Deutschland abfragen und dann alle Länder auf diesem Kontinent. Dann hast du auch alles in Europa.
25. März 20205 j Autor select name from land where KNR=(select KNR from land where name="DEUTSCHLAND"); wäre dann mein Befehl. Finde ich schwachsinnig, wenn man das auch einfach ohne Unterabfragen lösen.. manchmal muss man die Lehrer echt nicht verstehen.. aber danke für den Tipp
25. März 20205 j Und was, wenn Deutschland plötzlich nicht mehr in der Tabelle ist? EDIT: KEIN politisches Statement Bearbeitet 25. März 20205 j von KeeperOfCoffee
25. März 20205 j Steht der ausgeschrieben Kontinent vielleicht noch in einer anderen Tabelle, und der Lehrer möchte, dass du von dort den Namen abfragst? Normalerweise nimmt man dafür Joins, aber wenn er auf sowas steht...
25. März 20205 j Autor vor 3 Minuten schrieb PVoss: Steht der ausgeschrieben Kontinent vielleicht noch in einer anderen Tabelle, und der Lehrer möchte, dass du von dort den Namen abfragst? Normalerweise nimmt man dafür Joins, aber wenn er auf sowas steht... Nene, das ist die komplette Tabelle, so wie sie dort steht.. find ich auch echt komisch aber naja, wenn er es haben will dann kriegt er es eben
25. März 20205 j vor 21 Minuten schrieb Whitehammer03: A | ?ûsterreich | EU | 8.13 | 83845 | WIEN | steht das echt so drin? mit kaputtem Encoding? 😁
25. März 20205 j Autor vor 1 Stunde schrieb MartinSt: steht das echt so drin? mit kaputtem Encoding? 😁 Tatsächlich schon, ja 😂
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.