Heim  >  Artikel  >  Datenbank  >  Ungültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL

Ungültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL

巴扎黑
巴扎黑Original
2017-06-23 11:10:123237Durchsuche

Vorwort

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.

Anforderungen

Werfen wir zunächst einen Blick auf die gesamte Tabellenstruktur.
Ungültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL
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;

Ungültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL

Versuch und Irrtum

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:
Ungültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL
Sie sehen, dass dies nicht das gewünschte Ergebnis ist, order byhat 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
Ungültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL

Lösung

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
Ungültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL
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;

Ungültige Alternative für die gleichzeitige Verwendung von Group By und Order By in MySQL
ok! An diesem Punkt stellen wir fest, dass unsere ursprünglichen Bedürfnisse erfüllt wurden.

Zusammenfassung

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.

Referenzartikel


Erste Adresse

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn