Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

SQL Abfrage
Gehe zu Seite 1, 2  Weiter
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Informatik-Forum -> SQL Abfrage
 
Autor Nachricht
carinthianwerewolf
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 01.03.2008
Beiträge: 38

BeitragVerfasst am: 22 Apr 2008 - 22:26:12    Titel: SQL Abfrage

Hallo an alle

Also ich hab da in der LV Datenbanken folgende Aufgabenstellung is zwar ws eh recht simpel aber wär recht nett wenn mir jemand einen kleinen Anstoß geben könnte.

Ich habe eine Tabelle (geo_mountain) in der:

1. die Namen aller Berge (mountain)
2. die Namen aller Länder und (country)
3. die Namen aller Provinzen (province)

verzeichnet sind

Nun ist die Frage gestellt welche Berge sich über mehrere Länder erstrecken?!

Im Prinzip müsste ich ja nur zählen ob ein Berg in mehr als einem Land vorkommt nur wie mache ich das

Mit having count ?
Mir ist noch nicht ganz klar wie ich diese Klausel anwenden muss
--------------------------------------------------------------------------------
select * from geo_mountain

having count(*) >1
-------------------------------------------------------------------------------
was steht in den Klammern? Immer nur * ??

Danke im Vorraus
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 22 Apr 2008 - 23:17:38    Titel:

Ein having bringt nur wirklich was, wenn du vorher ein "group by" hattest. Und der * im count hilft auch nicht so sehr weiter... Du willst ja die unterschiedlichen Ländern zählen, also wohl eher count(country)...
take
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 03.11.2005
Beiträge: 1018

BeitragVerfasst am: 23 Apr 2008 - 13:37:24    Titel:

Zitat:
Ich habe eine Tabelle (geo_mountain) in der:

1. die Namen aller Berge (mountain)
2. die Namen aller Länder und (country)
3. die Namen aller Provinzen (province)
Nun ist die Frage gestellt welche Berge sich über mehrere Länder erstrecken?!

Ich würde folgendes machen:

select *
from
(
select mountain, count(country) "Anzahl"
from geo_mountain
group by mountain
)
where "Anzahl" > 1;
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 23 Apr 2008 - 23:17:59    Titel:

Warum so kompliziert? Ist mit having doch viel schöner...
carinthianwerewolf
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 01.03.2008
Beiträge: 38

BeitragVerfasst am: 25 Apr 2008 - 21:32:48    Titel:

nabend,

danke für die antworten.

bin noch nicht wirklich geübt in sql und hab da nochmal eine frage zu einem konkreten beispiel:

Ich habe eine Tabelle mountain gegeben in der der name der berge und die höhen angeführt sind.

zuerst zur verinfachten aufgabenstellung
Welcher der berge ist der höchste

also im prinzip muss ich ja den namen und die höhe auswählen und diesen mit allen werten in der tabelle verggleichen und wenn er größer ist soll er ausgegeben werden.
------------------------------------------------------
select name,height
from mountain
where height > (select height from mountain)
------------------------------------------------------
theoretisch müsste das doch so mit ner subquery funktionieren oder? tuts aber nicht

wäre über antworten überaus erfreut
carinthianwerewolf
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 01.03.2008
Beiträge: 38

BeitragVerfasst am: 25 Apr 2008 - 21:50:39    Titel:

was mir noch aufgefallen ist, warum kann ich wohl beides zugleich den höchsten und den niedrigsten berg
----------------------------------------------
select min(height),max(height)
from mountain
---------------------------------------------
abfragen
aber nicht den name und höhe des höchsten berges

--------------------------------------------
select name,max(height)
from mountain
--------------------------------------------

kann mir jemand erklären warum Question
take
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 03.11.2005
Beiträge: 1018

BeitragVerfasst am: 26 Apr 2008 - 00:02:17    Titel:

carinthianwerewolf hat folgendes geschrieben:
was mir noch aufgefallen ist, warum kann ich wohl beides zugleich den höchsten und den niedrigsten berg
----------------------------------------------
select min(height),max(height)
from mountain
---------------------------------------------
abfragen
aber nicht den name und höhe des höchsten berges

--------------------------------------------
select name,max(height)
from mountain
--------------------------------------------

kann mir jemand erklären warum :?:

Du kannst schon den Namen und die Höhe des Berges abfragen:

select name, max(height)
from mountain
group by name

Schau Dir mal die folgende Seite an:

http://sql.1keydata.com/de/sql-select.php

Dort werden Dir gut und kurz die wichtigsten SQL - Begriffe erläutert
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 26 Apr 2008 - 01:06:57    Titel:

Mit dem Subquery funktionierts nicht, weil er nicht weiß, wie er einen Wert mit einer Menge (nämlich der Menge, die der Subquery liefert) vergleichen soll. Hier würde "all" möglicherweise helfen. Allerdings müsstest du dann statt auf > auf >= vergleichen. Davon abgesehen ist so was relativ langsam.

Die Möglichkeit von take dürfte eigentlich nicht funktionieren, sondern müsste alle Datensätze liefern (ungetestet). Denn das Maximum wird über alle Elemente einer Gruppe gebildet. In jeder Gruppe sind jedoch nur genau ein Berg.

Ein Vorschlag von mir:

SELECT name FROM mountain ORDER BY height DESC LIMIT 1
take
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 03.11.2005
Beiträge: 1018

BeitragVerfasst am: 26 Apr 2008 - 01:23:01    Titel:

sarc hat folgendes geschrieben:
Die Möglichkeit von take dürfte eigentlich nicht funktionieren, sondern müsste alle Datensätze liefern (ungetestet). Denn das Maximum wird über alle Elemente einer Gruppe gebildet. In jeder Gruppe sind jedoch nur genau ein Berg.

Habe es auch nicht getestet.
Falls es nicht funktioniert, dann sollte es mit "having" klappen.
sarc
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.09.2006
Beiträge: 2657

BeitragVerfasst am: 26 Apr 2008 - 10:27:36    Titel:

Mit having kriegst du dann aber das gleiche Problem wie er mit seinem where. Denn effektiv wird bei der Abfrage ja überhaupt nichts gruppiert - jede Gruppe hat ja nur einen Eintrag.
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Informatik-Forum -> SQL Abfrage
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum