Postgres订购不按预期工作

时间:2017-10-26 14:26:22

标签: sql postgresql

以下是我正在使用的查询:

 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

基本上,我的聚合函数生成的数据顺序与预期不符。

输出应按abcd和page_no和位置排序。 预期产出:

A | 1,2,3,4 | XX

实际输出

A |2,4,1,3 | XX

第二列未根据page_no排序,位置在查询中给出。

abcd专栏有各种各样的数据,包括数字,特殊字符 例如:0900 dr jne pink0900 dr jne pink098 lakhani shoeiphonec??mpu men shoe sportabcd列中的一些示例字词

我尝试使用整理“C”选项

有没有办法弄清楚哪个词搞砸了排序顺序

2 个答案:

答案 0 :(得分:1)

使用aggregate expression:

中的ORDER BY子句
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

忽略派生表中的ORDER BY子句。

答案 1 :(得分:0)

您正在显示不完整的查询。但是,它似乎是这样的:

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

您的主要选择在此处没有ORDER BY子句。因此,您可以按任何顺序获取结果行。 DBMS可以忽略子查询中的ORDER BY子句,因为表中的数据(包括派生表,即子查询)被视为无序集。