このクエリをグループ化して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