0

1 つの列の数が必要で、FROM 句に 5 つの列がありますが、from 句にすべての列が含まれているため、間違った数を示しています。GROUP BY 句にその特定の列は必要ありません。

GROUP BY 句からその列を削除すると、次のエラーがスローされます。

エラー: 列 "pt.name" は GROUP BY 句に指定するか、集計関数で使用する必要があります 行 1: (pu.id) pu.id、pt.name を package_name、c... で個別に選択してください。

例えば:

SELECT DISTINCT ON (a) a,b,c,count(d),e
FROM table GROUP BY a,b,c,d,e ORDER BY a

これから、GROUP BY から e を削除したいと思います。

正しいカウントを取得できるように、その列を GROUP BY から削除するにはどうすればよいですか?

4

1 に答える 1

3

質問を読み直した後に更新されました。
あなたはミキシングGROUP BYしてDISTINCT ONいます。あなたが望むこと(私がそれをどのように理解するか)は、:と組み合わせたウィンドウ関数DISTINCT ONで行うことができます:

SELECT DISTINCT ON (a)
       a, b, c
     , count(d) OVER (PARTITION BY a, b, c) AS d_ct
     , e
FROM   tbl
ORDER  BY a, d_ct DESC;

ウィンドウ関数には、後でPostgreSQL8.4以降が必要です。

ここでは何が起きるのですか?

  1. の値がnull以外の、テーブル内に存在するd_ct同一のセットの数を数えます。(a,b,c)d
  2. ごとに正確に1行を選択しaます。ORDER BYだけではない場合はa、ランダムな行が選択されます。
  3. 私の例ではORDER BY d_ct DESC、さらに、セットから最も高い疑似ランダム行d_ctが選択されます。

あなたが必要とするかもしれないもののもう一つの、わずかに異なる解釈、GROUP BY

SELECT DISTINCT ON (a)
       a, b, c
     , count(d) AS d_ct
     , min(e)   AS min_e             -- aggregate e in some way
FROM   t
GROUP  BY a, b, c
ORDER  BY a, d_ct DESC;

GROUP BYの前 に適用されるDISTINCT ONため、結果は上記の結果と非常に似ていますが、e/の値のみmin_eが異なります。

于 2012-05-04T13:35:49.027 に答える