'グループクォータ内で' using the bottom
N個の値を計算します。私はいくつかの例を読んできました。hereは、この数値を計算するさまざまな方法を説明していますが、私はそれらを完全には理解していません(そしてPostgreSQL特有のものもありません)。私は私の質問を説明するために、以下の表を使用しています:サブグループ内集計計算を実行する
a | b | x
---|---|------
1 | 1 | 10.00
1 | 2 | 15.00
1 | 1 | 10.00
1 | 2 | 15.00
2 | 2 | 20.00
2 | 1 | 21.00
2 | 2 | 18.00
SQL
をテーブルを作成するには:
CREATE TABLE test(a int,b int,x decimal(6,2));
INSERT INTO test VALUES(1,1,10),(1,2,15), (1,1,10), (1,2,15), (2,2,20),(2,1,21),(2,2,18);
私はグループごとに、最低N
値の最小値を計算することができるようにしたいです。この例では、N = 2
を送付しています。
SELECT
t1.a,
AVG(t1.x) as avg_x
FROM
test AS t1
GROUP BY t1.a
ORDER BY avg_x
返します:私が試してみました最初のステップは以下の通りである
a | avg_x
--|------
1 | 12.50
2 | 19.66
私は(誤った結果が得られているが)サブクエリを作るために、そして制限することですやってみたことは何結果数:
SELECT foo.* FROM
(SELECT
t1.a,
AVG(t1.x) as avg_x
FROM
test AS t1
GROUP BY t1.a
ORDER BY avg_x
) as foo
ORDER BY foo.avg_x
LIMIT 2
私はそれは、サブグループごとLIMIT
を使用していないとして、これは、正しくありません知っています。私が返さするテーブルを明確にするためである:a=1
ため
a | avg_x
--|------
1 | 10.00
2 | 19.00
生の結果が値10.0, 10.0
の平均で、x = 10.0, 10.0, 21
です。
私はちょっと混乱しました。最初のテーブルから、あなたが探している(テーブルとして)期待される結果は何ですか? –
さらにもう1つ、主キーは何ですか? –
明快さの欠如のため申し訳ありません - 私はこれを再度説明しようとしました。この例では、プライマリキーを使用していませんでした。 – djq