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.