Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 3368 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
gelöst MYSQL View group by (2)

Frage von schneerunzel zum Thema Datenbanken ...

Netzwerkmanagement
gelöst Eine kleine Frage zum DHCP-Server (8)

Frage von samet22 zum Thema Netzwerkmanagement ...

Microsoft Office
Office 2016 Oberfläche anpassen per Group Policy

Frage von johnde zum Thema Microsoft Office ...

Neue Wissensbeiträge
Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Windows Server

Exchange 2010 auf Windows Server 2016 und AD

(2)

Tipp von Herbrich19 zum Thema Windows Server ...

KVM

How to: Libvirt Port forwarding

(2)

Anleitung von fundave3 zum Thema KVM ...

Heiß diskutierte Inhalte
Basic
Programmierung von Windows Programmen (9)

Frage von Ghost108 zum Thema Basic ...

C und C++
Fehlendes verständiss von C und C++ (8)

Frage von zelamedia zum Thema C und C ...