Im letzten Jahr habe ich aus beruflichen Gründen hauptsächlich NoSql-Datenbanken verwendet und fühle mich mit relationalen Datenbanken immer unbekannter. Ein Mordfall, der durch group by
und order by
verursacht wurde begann mit dieser Geburt. Merken Sie sich hier für Notfälle vor.
Werfen wir zunächst einen Blick auf die gesamte Tabellenstruktur.
findet jetzt die neuesten Daten in jedem barCode
.
Da zu viele Daten vorhanden sind, ist der Effekt nicht sehr gut. Nehmen wir als Beispiel die Daten mit barCode
als 4565789
.
SELECTbarCode, priCommodityID, createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC;
Da ich schon lange kein SQL mehr geschrieben habe. Also dachte ich zuerst darüber nach, die kombinierten Abfragen „Gruppieren nach“ und „Bestellen nach“ zu verwenden.
SELECTbarCode, priCommodityID, createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCodeORDER BYcreateDate DESC;
Die Ergebnisse sind wie folgt:
Sie sehen, dass dies nicht das gewünschte Ergebnis ist, order by
hat keine Auswirkung.
Als nächstes versuchen wir, die beiden mithilfe von Unterabfragen zu kombinieren. Zuerst sortieren und dann gruppieren
SELECT*FROM(SELECTbarCode, priCommodityID, createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC) AS AGROUP BYA.barCode;
Das Ergebnis ist immer noch enttäuschend
Habe die beiden oben genannten Methoden ausprobiert Das Ergebnis ist traurig, die Arbeit muss weitergehen. Also suchte ich online nach verschiedenen Informationen, um zu sehen, ob ich das Problem auf andere Weise lösen könnte. Ich habe zufällig gesehen, dass group_concat
eine Gruppensortierung erreichen kann, also habe ich es ausprobiert
SELECTbarCode, GROUP_CONCAT( priCommodityIDORDER BYcreateDate DESC) AS priCommodityID, GROUP_CONCAT( createDateORDER BYcreateDate DESC) AS createDateFROMtb_history_versionWHEREbarCode = '4565789';
Die Ergebnisse sind wie folgt
Sie können sehen dass die Reihenfolge in Ordnung ist, aber alle Daten zusammengefügt sind. Eine weitere Verarbeitung der abfangenden Zeichen ist erforderlich
SELECTbarCode, SUBSTRING_INDEX( group_concat( priCommodityIDORDER BYcreateDate DESC),',',1) AS priCommodityID, SUBSTRING_INDEX( group_concat( createDateORDER BYcreateDate DESC),',',1) AS createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCode;
ok! An diesem Punkt stellen wir fest, dass unsere ursprünglichen Bedürfnisse erfüllt wurden.
Die gleichzeitige Verwendung von group by
und order by
hat keine Wirkung. Sie können stattdessen group_concat
und groub by
verwenden. Die Feldsortierung kann innerhalb von group_concat
implementiert werden.
http://www.devzxd.top/2017/05/27/mysql-groupby -orderby.html
Das obige ist der detaillierte Inhalt vonUngültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!