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.