2017-10-26 4 views
0

Im Folgenden finden Sie die Abfrage ich verwende:Postgres stellt Bestell nicht wie erwartet funktioniert

SELECT T.abcd, 
      String_agg(T.yyy, ',') AS yyys, 
      T.bbb 
     FROM (SELECT s.abcd, 
        up.yyy, 
        s.bbb, 
        s.secondary_id 
       FROM A s 
        join B su 
         ON su.search_term_id = s.id 
        join lll_yyy up 
         ON up.lll = su.lll 
       ORDER BY s.abcd 
         su.page_no, 
         su.position) T GROUP BY T.abcd, T.bbb 

Grundsätzlich ist die Reihenfolge der Daten nach meiner Aggregat-Funktion erzeugt wird, nicht wie erwartet.

Die Ausgabe sollte nach abcd und page_no und position sortiert werden. Erwartete Ausgabe:

A | 1,2,3,4 | XX 

Tatsächliche Ausgabe

A |2,4,1,3 | XX 

die zweite Spalte in nicht sortiert basierend auf page_no, Position wie in der Abfrage angegeben.

die ABCD-Säule hat eine Vielzahl von Daten mit Zahlen, Sonderzeichen usw. Beispiel: 0900 dr jne pink, 0900 dr jne pink, 098 lakhani shoe, iphone, sind einige Beispiele c??mpu men shoe sport Begriffe in der Spalte abcd

I versucht mit kollationieren „C "Option

gibt es eine Möglichkeit, das Wort, um herauszufinden, wird die Sortierreihenfolge zu vermasseln

+0

Beispiel bitte. – lad2025

+2

Beim Sortieren von Strings wird "10" kleiner als "2" sein. Wenn Sie sie als Zahlen behandeln wollen, sehen Sie hier: https://stackoverflow.com/questions/tagged/postgresql+natural-sort –

+0

Wenn Sie hilfreiche Antworten erhalten möchten, dann bitte ** [EDIT] ** Ihre Frage und fügen Sie hinzu einige [Beispieldaten] (http://plaintetxtols.github.io/plain-text-table/) und die erwartete Ausgabe basierend auf diesen Daten. [** Formatierter Text **] (http://stackoverflow.com/help/formatting) bitte, [** keine Screenshots **] (http://meta.stackoverflow.com/questions/285551/why-may -I-nicht-Upload-Bilder-of-Code-auf-so-wenn-eine Frage zu stellen/285557 # 285557). ** [Bearbeiten] ** Ihre Frage - tun ** nicht ** Postleitzahl oder zusätzliche Informationen in Kommentaren. –

Antwort

1

über die ORDER BY-Klausel in den aggregate expression:

SELECT T.abcd, 
     String_agg(T.yyy, ',' ORDER BY s.abcd, su.page_no, su.position) AS yyys, 
     T.bbb 
    FROM (SELECT s.abcd, 
       up.yyy, 
       s.bbb, 
       s.secondary_id 
      FROM A s 
       join B su 
        ON su.search_term_id = s.id 
       join lll_yyy up 
        ON up.lll = su.lll) T GROUP BY T.abcd, T.bbb 

Die ORDER BY-Klausel in einer Tabelle abgeleitet wird ignoriert.

+0

Vielen Dank. Das scheint zu funktionieren –

0

Sie zeigen eine unvollständige Abfrage. Allerdings scheint es so zu sein:

SELECT ... FROM (SELECT ... ORDER BY ...) 

Ihr Haupt wählen keine ORDER BY Klausel hier hat. Sie können daher die Ergebniszeilen in beliebiger Reihenfolge erhalten. Die ORDER BY-Klausel in der Unterabfrage kann vom DBMS ignoriert werden, da Daten in einer Tabelle (die abgeleitete Tabellen, d. H. Unterabfragen) enthält, als ungeordnete Menge betrachtet werden.

Verwandte Themen