1

このクエリをグループ化してPostgresql 9.2ユーザーを 1 人だけ取得し、app_user2group_item_ex.user_id または app_user.id でグループ化して、6 行ではなく 3 行 (user_id ごとに 1 行) を取得する方法を知りたいです。日本、アメリカ、シンガポールの列のデータは、希望する結果にリストされているようなものです。

app_user.id ごとに Group By を使用すると、他のすべての列に番号を追加する必要があるという情報が得られGroup By or Agregateます。

私はpostgresqlが初めてなので、この特定のケースに関する情報を得ることができれば.

SELECT 
    group_ex2group_item_ex.group_ex, 
    group_ex2group_item_ex.items_id, 
    group_ex.id, 
    group_ex.name, 
    group_ex.group_id, 
    group_item_ex.id, 
    group_item_ex.name, 
    group_item_ex.group_id, 
    app_user.first_name, 
    app_user.id, 
    app_user2group_item_ex.user_id, 
    app_user2group_item_ex.group_item_id,
    (CASE WHEN group_ex."name" = 'Japan' THEN group_item_ex.name END) AS Japan,
    (CASE WHEN group_ex."name" = 'USA' THEN group_item_ex.name END) AS USA,
    (CASE WHEN group_ex."name" = 'Singapore' THEN group_item_ex.name END) AS Singapore
FROM 
    public.group_ex, 
    public.group_ex2group_item_ex, 
    public.group_item_ex, 
    public.app_user, 
    public.app_user2group_item_ex
WHERE 
    group_ex2group_item_ex.group_ex = group_ex.id AND
    group_ex2group_item_ex.items_id = group_item_ex.id AND
    group_item_ex.group_id = group_ex.group_id AND
    app_user.id = app_user2group_item_ex.user_id AND
    app_user2group_item_ex.group_item_id = group_item_ex.id;

クエリの結果:

group_ex    items_id    id  name    group_id    id  name    group_id    first_name  id  user_id group_item_id   Japan   USA Singapore
1   1   1   Japan   1   1   Nagoya  1   Will    1   1   1   Nagoya      
1   2   1   Japan   1   2   Kyoto   1   Novak   3   3   2   Kyoto       
2   3   2   USA 2   3   New York    2   Will    1   1   3       New York    
2   4   2   USA 2   4   Los Angeles 2   Bos 2   2   4       Los Angeles 
3   5   3   Singapore   3   5   Pudong  3   Bos 2   2   5           Pudong
3   6   3   Singapore   3   6   Center  3   Novak   3   3   6           Center

望ましい結果(必要ないため、ここにすべてのフィールドをリストしませんでした):

first_name  id  user_id Japan   USA Singapore
Will    1   1   Nagoya  New York    
Novak   3   3   Kyoto       Center
Bos 2   2       Los Angeles Pudong
4

1 に答える 1