WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 22.11.2004, 14:21   #1
EMB
Jr. Member
 
Registriert seit: 10.09.2004
Beiträge: 29


Standard sql abfrage

hi!

habe 4 tabellen mit den attributen land und wert.

ich brauche eine sql abfrage die mir eine tabelle ausgibt, die jedes land der 4 tabellen vergleicht und nur den größten der 4 werte ausgiebt.

thanks!
EMB ist offline   Mit Zitat antworten
Alt 22.11.2004, 14:30   #2
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Hä?

Ich freu mich ja immer über SQL Fragen, da ich mich da halbwegs auskenn, aber die Logik versteh ich jetz ned ganz

also zuerst einmal, welche sql-sprache? mysql? mssql? access?

Du hast vier Tabellen in denen du jeweils die Felder "land" und "wert" hast? warum schreibst du das nicht einfach alles in eine tabelle? dann könntest (Access) einfach das machen:

SELECT Tabelle1.land
FROM Tabelle1
where Tabelle1.wert=(select max(Tabelle1.wert) From Tabelle1)

geht wahrscheinlich noch einfacher, mal schauen...
T.dot ist offline   Mit Zitat antworten
Alt 24.11.2004, 10:54   #3
EMB
Jr. Member
 
Registriert seit: 10.09.2004
Beiträge: 29


Standard

Verwendet wird MS Access.

Ich habe eine Liste mit Ländern einem Wert und einem Namen.

Die Länder kommen öfter vor. Ich brauch nun zu jedem Land den Namen der den größten Wert hat.

Die SQL Abfrage von oben gibt mir nur das Land mit dem größten Wert aus.
EMB ist offline   Mit Zitat antworten
Alt 24.11.2004, 11:38   #4
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

aso!

SELECT Tabelle1.land, Max(Tabelle1.wert) AS Maxvonwert
FROM Tabelle1
GROUP BY Tabelle1.land;

statt Tabelle1 musst halt deinen Tabellennamen nehmen

wennst eh in Access arbeitest geht das auch sehr einfach, wenn du ne Auswahlabfrage in der Entwurfsansicht erstellst und dort "Funktionen" wählst (rechte Maustaste -> funktionen oder in der Titelleiste das Summensymbol)

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 25.11.2004, 10:01   #5
EMB
Jr. Member
 
Registriert seit: 10.09.2004
Beiträge: 29


Standard

Ok. Wenn ich die letzte Abfrage versuche bekomme ich folgende Fehlermeldung:

Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'Max Wert' nicht als Teil der Aggregatfunktion einschließt.

Müßte die Abfrage nicht ungefähr so aussehen?

select *
from tabelle
group by land
having max (wert);
EMB ist offline   Mit Zitat antworten
Alt 25.11.2004, 10:18   #6
EMB
Jr. Member
 
Registriert seit: 10.09.2004
Beiträge: 29


Standard

Einige Beispiel Datensätze. Mich interessiert vorerst nur die Kombination (für jedes Land das mit dem höchsten Wert in Min_Festnetz ausgeben plus den kartennamen).

ID Land Min_Festnetz Minutenpreis_Festnetz Min_Handy Minutenpreis_Handy Kartenname
47386097 Afghanistan 33,3 0,3 41,36 0,242 Trafik Handy
833 Afghanistan 22 0,435 Blackbox
1484 Afghanistan 22 0,435 Ideal tel univ
251 Afghanistan 28 0,3605 28 0,3626 Optima
1138 Afghanistan 30 0,329 Trafik Festnetz
252 Albania 66 0,1525 48 0,2076 Optima
47386099 Albania 17,4 0,575 20,46 0,489 Trafik Handy
834 Albania 74 0,135 64 0,1550 Blackbox
1485 Albania 74 0,135 64 0,1550 Ideal tel univ
1139 Albania 71 0,139 52 0,1890 Trafik Festnetz
EMB ist offline   Mit Zitat antworten
Alt 25.11.2004, 10:24   #7
EMB
Jr. Member
 
Registriert seit: 10.09.2004
Beiträge: 29


Standard

Diese Abfrage wurde mit dem Assistenten erstellt:

SELECT DISTINCTROW Gesamtliste.Land, Gesamtliste.Minutenpreis_Festnetz, Gesamtliste.Kartenname, Max(Gesamtliste.Min_Festnetz) AS [Max von Min_Festnetz]
FROM Gesamtliste
GROUP BY Gesamtliste.Land, Gesamtliste.Minutenpreis_Festnetz, Gesamtliste.Kartenname;

Im Prinzip funktioniert sie nur gibt sie mir alle Datensätze aus (zwar gereiht nach Land und da absteigend nach Min_Festnetz). Ich möchte aber nur das Land mit dem größten Wert in Min_Festnetz.
EMB ist offline   Mit Zitat antworten
Alt 25.11.2004, 10:34   #8
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Also bei mir (mal auf Access 2003 getestet) funktioniert meine Abfrage ohne Probleme.

Für deine Feldnamen würds halt so aussehen:
SELECT Tabelle1.Land, Max(Tabelle1.Min_Festnetz) AS MaxvonMin_Festnetz
FROM Tabelle1
GROUP BY Tabelle1.Land;


das dies hier:
SELECT DISTINCTROW Gesamtliste.Land, Gesamtliste.Minutenpreis_Festnetz, Gesamtliste.Kartenname, Max(Gesamtliste.Min_Festnetz) AS [Max von Min_Festnetz]
FROM Gesamtliste
GROUP BY Gesamtliste.Land, Gesamtliste.Minutenpreis_Festnetz, Gesamtliste.Kartenname;

nicht funktioniert is auch klar. Wenn du alle Werte ausliest und nur das max vom festnetz, wie soll er die dann gruppieren? Access tut sich ein bisschen schwer verschieden Werte für Minutepreis_Festnetz, Kartenname, etc. zu gruppieren.

Also öffne deine Abfrage in der Entwurfsansicht und hau die Felder raus, die du nicht brauchst. Wenn du die Felder aber haben willst und die Werte in den Feldern, die zusammengefügt werden sollen nicht gleich sind, so musst du dir eine andere Gruppierfunktion (first, min, max, etc.) für das jeweilige feld suchen, das dir das gewünschte ergebnis liefert. Unter umständen brauchst du hierfür noch ne Unterabfrage dazu, müsste man sich überlegen.
Aber nachdem du nur Land und max Wert haben willst (wenn ich dich richtig verstanden habe), dann genügt es die Felder zu löschen.

Hoffe alle Möglichkeiten geklärt zu haben, mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 25.11.2004, 10:53   #9
EMB
Jr. Member
 
Registriert seit: 10.09.2004
Beiträge: 29


Standard

Ok. Du hast recht. Deine Abfrage funktioniert. Es wird zu jedem Land der größte Wert in Min_Festnetz ausgegeben.

Wie kann ich nun noch zusätzlich den Kartennamen ausgeben. (Funktioniert das nur mit einem natural join mit der ursprünglichen Tabelle).Wenn ich in der Entwurfsansicht noch ein Attribut (Kartennamen)auswähle, gibt Access mir wieder nicht nur den Datensatz mit dem größten Wert an.

Danke auf jeden Fall für deine Hilfe!
EMB ist offline   Mit Zitat antworten
Alt 25.11.2004, 12:19   #10
EMB
Jr. Member
 
Registriert seit: 10.09.2004
Beiträge: 29


Standard

SELECT Gesamtliste.Land, Gesamtliste.Min_Festnetz, Gesamtliste.Minutenpreis_Festnetz, Gesamtliste.Kartenname
FROM Gesamtliste
WHERE Gesamtliste.Min_Festnetz in (
SELECT Max(Gesamtliste.Min_Festnetz) AS MaxvonMin_Festnetz
FROM Gesamtliste
GROUP BY Gesamtliste.Land;

Leider kommen wieder nicht die gewünschten daten raus. was läuft da falsch?
EMB ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:12 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag