0

だから私はこのクエリを取得しました、そしてそれはこのようなテーブルから引っ張っています:

プランテーションテーブル

PLANT ID,   Color Description 
1           Red
2           Green
3           Purple

野菜テーブル

VegetabkeID, PLANT ID, Feeldesc
199            1        Harsh
200            1        Sticky
201            2        Bitter
202            3        Bland

そして今、私のクエリでは、プラントIDを使用してそれらを結合します(左結合を使用します)

PLANT ID, Color Description, Feeldesc
1           Red               Harsh             
1           Red               Sticky
2           Green             Bitter
3           Purple            Bland

したがって、問題は、クエリで赤が2回表示されることです。私はこれを持てません、そして私は結合を起こさせる方法がわかりませんが、赤が二度現れるのを止めます。

4

2 に答える 2

1

グループ表示の方法、つまり、グループを識別または説明する値をそのグループの最初の行にのみ表示する方法を尋ねている可能性はほとんどないようです。その場合は、lag() ウィンドウ関数を使用します。

スキーマとデータのセットアップが次のようであると仮定します。

create table plant (plantId int not null primary key, color text not null);
create table vegetable (vegetableId int not null, plantId int not null,
             Feeldesc text not null, primary key (vegetableId, plantId));
insert into plant values (1,'Red'),(2,'Green'),(3,'Purple');
insert into vegetable values (199,1,'Harsh'),(200,1,'Sticky'),
                             (201,2,'Bitter'),(202,3,'Bland');

表示する結果 (モジュラスの列見出し) は、次の単純なクエリで取得できます。

select p.plantId, p.color, v.Feeldesc
  from plant p left join vegetable v using (plantId)
  order by plantId, vegetableId;

最初の行の後に繰り返される情報の表示を抑制したい場合は、次のクエリで実行できます。

select
    case when plantId = lag(plantId) over w then null
         else plantId end as plantId,
    case when p.color = lag(p.color) over w then null
         else p.color end as color,
    v.Feeldesc
  from plant p left join vegetable v using (plantId)
  window w as (partition by plantId order by vegetableId);

結果は次のようになります。

 plantid | color  | feeldesc 
---------+--------+----------
       1 | Red    | Harsh
         |        | Sticky
       2 | Green  | Bitter
       3 | Purple | Bland
(4 rows)

エンド ユーザーが読みやすいように、psql から直接リストを生成するために、ちょうど今週、上記のようなことをしなければなりませんでした。そうでなければ、あなたがこの機能について質問しているとは思いもしませんでした。私は完全にベースから外れているかもしれませんが、これがあなたの質問に答えてくれることを願っています.

于 2012-04-04T23:06:22.473 に答える
0

ドキュメントの array_agg 関数を確認してください。次のように使用できます。

SELECT
     v.plantId
    ,v.color
    ,array_to_string(array_agg(v.Feeldesc),', ')
FROM
    vegetable
    INNER JOIN plant USING (plantId)
GROUP BY
    v.plantId
    ,v.color

または使用

SELECT DISTINCT
     v.plantId
    ,v.color
FROM
   vegetable
   INNER JOIN plant USING (plantId)

免責事項: 手書き、構文エラーが予想されます :)

于 2012-04-04T18:47:06.840 に答える