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...

Mitglied: alterVerwalter

alterVerwalter (Level 1) - Jetzt verbinden

26.01.2010 um 09:27 Uhr, 3379 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
Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 30 MinutenAdministrator.de Feedback4 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 17 StundenHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 1 TagSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...