2016-04-27 9 views
1

私はこのようなテーブルを持っています。文字列集約グループと値でのカウント

| table      | 
| class_id| name | gender | 
+---------+---------+----------+ 
|  1 | Jane |  F | 
|  1 | John |  M | 
|  1 | Tom  |  M | 
|  1 | Bob  |  M | 
|  2 | Jack |  M | 
|  2 | Kate |  F | 

このようなクエリがあります。

select id, array_to_string(array_agg(name), ' - '::text) as name_list from table 
group by class_id 

私の結果は

| 1 | Jane-John-Tom-Bob | 

ですが、私も、私が1 F + 3 M

のような列を必要とする(CASS 1)最初のグループにわけ、私の性別回数をカウントしたいのですが

私のリクエストはこのようなもので、私は1グループで使いたいです。

| 1 | Jane-John-Tom-Bob |1F + 3M 
+2

'array_to_string(ARRAY_AGG(名前)、 ' - '::テキストは)' 'string_agg(' - ' 名前、)に単純化することができる助けを' –

答えて

2

あなたがフィルタリング骨材とそれを行うことができます:あなたは、古いPostgresのバージョンである場合

select id, 
     string_agg(name), ' - ') as name_list, 
     concat( 
      count(*) filter (where gender = 'F'), 
      'F + ', 
      count(*) filter (where gender = 'M'), 
      'M') as gender_count 
from table 
group by class_id; 

、あなたが

count(case when gender = 'F' then 1 end) 

count(*) filter (where gender = 'F') 

を交換する必要があります

( 'M'と同じ)

+0

感謝。それは素晴らしいことです。さらなる使用のために、私は値を知らないが、私はどのように私はフィルタでそれを使用することができます私はグループのために使用できる列を知っていますか?たぶん私は10以上のフィルタ値を使用することができます。 – lokmancetin

+0

@ローマンセチン:すみません、私はあなたを理解していません。グループ化する列は、フィルタリングされた集計を適用する列とは何も関係ありません。 –

+0

答えでは、フィルタ値はFとMのように一般的です。しかし、フィルタの値が50以上の場合、この50の値はこの現在の表の列にも含まれます。グループ単位で値を取得できます。これらのグループ化された値をフィルタ集合体で使用したいと思います。 – lokmancetin

0

select tt.class_id, string_agg (t, ','::text) as gender, string_agg(distinct y,','::text) as name 

from 

(

select class_id, count(gender)::text|| string_agg(distinct gender, ',' ) as t 
     from string_test 
group by class_id , gender 

) tt , 

(
select class_id, string_agg(distinct name::text, ','::text) as y 
    from string_test 
group by class_id 
) yy 
where tt.class_id=yy.class_id 

group by tt.class_id 

結果フィルター集合体を使用せずに、別の解決策があります。

+==========+========+===================+ 
| class_id | gender | name    | 
+==========+========+===================+ 
| 1  | 1F,3M | Bob,Jane,John,Tom | 
+----------+--------+-------------------+ 
| 2  | 1F,1M | Jack,Kate   | 
+==========+========+===================+ 
関連する問題