Heim  >  Fragen und Antworten  >  Hauptteil

Rufen Sie ein Datensatzpaar aus der Group-by-Klausel ab

Ich habe eine Tabelle aus dieser Tabelle und verwende diese Tabelle, um Datensätze zu erhalten

string_agg(a2.sampl_no, ', ') as sampl_nos

und die Group-by-Klausel funktionieren gut, aber ich möchte höchstens 4 sample_no-Aggregate pro Zeile haben.

Angenommen, ich erhalte

aus der Datenbank
string_agg as (0001, 0002, 0003, 0004, 0005, 0006)

Nacheinander, aber ich will das

(0001, 0002, 0003, 0004) (0006, 0007).

Helfen Sie mir, dieses Problem zu lösen.

P粉195402292P粉195402292282 Tage vor465

Antworte allen(1)Ich werde antworten

  • P粉564192131

    P粉5641921312024-02-04 15:08:29

    如果您想在数据库中执行此操作,可以使用 row_number() 将记录分成四组,然后使用 string_agg()

    select * from rec_agg;
    ┌───────────┐
    │ sample_no │
    ├───────────┤
    │ 0001      │
    │ 0002      │
    │ 0003      │
    │ 0004      │
    │ 0005      │
    │ 0006      │
    │ 0007      │
    │ 0008      │
    │ 0009      │
    │ 0010      │
    │ 0011      │
    └───────────┘
    (11 rows)
    
    
    with mk_grp as (
      select *, ((row_number() over (order by sample_no)) - 1) / 4 as grp 
        from rec_agg
    ) 
    select string_agg(sample_no, ' ,') 
      from mk_grp 
     group by grp ;
    ┌────────────────────────┐
    │       string_agg       │
    ├────────────────────────┤
    │ 0001 ,0002 ,0003 ,0004 │
    │ 0009 ,0010 ,0011       │
    │ 0005 ,0006 ,0007 ,0008 │
    └────────────────────────┘
    (3 rows)

    Antwort
    0
  • StornierenAntwort