Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Kleine frage zu having,group by...

Frage Entwicklung Datenbanken

Mitglied: alterVerwalter

alterVerwalter (Level 1) - Jetzt verbinden

26.01.2010 um 09:27 Uhr, 3376 Aufrufe, 3 Kommentare

Hallo,

habe folgende tabelle 'einkauf'

artnr lieferant preis
111 A 10
111 B 9
111 C 12
222 A 7
222 C 12

ich will ganz einfach als Ergebnis eine Liste mit allen artikel haben mit dem geringsten einkaufspreis und dem enstprechenden günstigsten preis

Ganz simpel habe ich es versucht mit

01.
select artnr,lieferant,min(preis) from einkauf group by artnr


Aber dann wird nicht der entsprechende Lieferant mit dem günstigsten Preis angezeigt, sondern willkürlich irgendein Lieferant , der diesen Artikel im Programm hat.

Dann habe ich es mit having versucht:

01.
select artnr,lieferant,min(preis) from einkauf group by artnr having min(preis)
Liefert das gleiche Ergebnis wie oben.


Irgendwie stehe ich hier total auf dem Schlauch. Ist doch im Prinzip eine simple Sache, oder? Kann doch fast nicht sein,dass ich mich damit den ganzen Morgen beschäftigen muss
Wäre froh, wenn mir kurz jemand auf die Sprünge helfen könnte.
Mitglied: Biber
26.01.2010 um 10:25 Uhr
Moin alterVerwalter,

eine Ermittlung des kleinsten Preises mit MIN(preis) verbunden mit einem "HAVING Min(preis)" ist nicht zielführend.

Bei GROUP BY-Abfragen werden Aggregatfunktionen wie Min/), Max(), Sum(), Avg()... verwendet, richtig.
Aber: HAVING "filtert" den Resultset einer kumulierten GROUP BY-Abfrage nur auf die Felder, die auch in der Feldliste erwähnt sind.
Und da kannst du den Lieferanten noch nicht dabeihaben.

Versuch es mit einem Subselect.

01.
SELECT einkauf.artnr,einkauf.lieferant, einkauf.preis  
02.
FROM einkauf, (SELECT artnr, min(preis) as minpreis FROM Einkauf GROUP BY artnr) billichKauf 
03.
WHERE einkauf.ARTNR=billichkauf.artnr 
04.
AND einkauf.preis=billichkauf.minpreis

...würde liefern:

artnrlieferantpreis
111B 9
222A7


Grüße
Biber
Bitte warten ..
Mitglied: nxclass
26.01.2010 um 10:56 Uhr
Wird bei GROUP nicht immer der zuerst gefundene Wert genommen ? - dann sollte doch auch:
01.
SELECT tmp.* 
02.
FROM ( 
03.
    SELECT artnr, lieferant, preis 
04.
    FROM einkauf 
05.
    ORDER BY preis 
06.
   /*  WHERE artnr = @artnr */ 
07.
    ) AS tmp 
08.
GROUP BY tmp.lieferant, tmp.artnr
... funktionieren. Mit dem Vorteil das nicht über die 'preis' Spalte gesucht werden muss. (bzw. ein Index generiert werden muss)

btw. Hat die Tabelle keine ID ?

edit: SQL überarbeitet
Bitte warten ..
Mitglied: alterVerwalter
26.01.2010 um 11:48 Uhr
hallo,

danke biber, deine lösung hat genau das gebracht was ich gesucht habe!
Auf den trichter, dass ich den subquery auch in from einbringen kann, bin ich nicht gekommen, hatte es in der where klausel versucht, aber da bin ich nicht weiter gekommen und habe es wieder verworfen.

@nxclass: diese tabelle war natürlich nur sehr sehr stark vereinfacht.
und so ganz versteh ich auch dein lösungsansatz nicht, und vor allem warum "group by tmp.lieferant"?
wenn ich das so verwendete bekomm ich doch nur eine tabelle mit nur einer zeile pro lieferant mit willkürlicher ean und preis?!?

ist das wirklich so "eleganter"?


Aber ich denke mal, dass ich mit Biber´s Lösung auch zum Ziel komme!?!
Bitte warten ..
Ähnliche Inhalte
Datenbanken
MYSQL View group by
gelöst Frage von schneerunzelDatenbanken2 Kommentare

Hallo zusammen, ich habe eine Tabelle in einer MySQL DB über die ich eine View legen möchte: Die Tabelle ...

Entwicklung
SQL GROUP BY Convert Datetime
gelöst Frage von StfnCstrEntwicklung4 Kommentare

Hallo Zusammen, ich sitze schon seit gefühlten Stunden an nem Script, ist wahrscheinlich sehr simpel, jedoch seh ich den ...

Datenbanken
SSIS - Group By und MAX von String-Spalten
gelöst Frage von batpointDatenbanken2 Kommentare

Hallo. Ich habe im SSIS eine Tabelle die ich gerne auf zwei Spalten hin gruppieren möchte. Meine Tabelle sieht ...

Netzwerkmanagement
Eine kleine Frage zum DHCP-Server
gelöst Frage von samet22Netzwerkmanagement8 Kommentare

Hallo :) Ich hätte nur eine kleine Frage bezüglich DHCP und Zonen. In meinem Netzwerk habe ich folgende Zonen ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 4 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...