私は、my_tableから最も反復的な値を選択するクエリを持っています。クエリは以下の通りです:このクエリでの問題は、それがために間違った値を与えている降順で最も反復値を返すということですPostgreSQLでもっとも反復性の高い値を修正する方法
gid id max_height
3 1 19.3
3 2 19.3
3 3 20.3
3 4 20.3
3 5 19.3
3 6 19.3
3 7 21.4
3 8 21.4
3 9 21.4
3 10 21.4
3 11 21.4
3 12 21.4
22 1 23.1
22 2 23.1
22 3 23.1
22 4 23.1
22 5 23.1
22 6 23.1
22 7 22.1
22 8 22.1
22 9 22.1
22 10 22.1
22 11 22.1
22 12 22.1
29 1 24
29 2 24
29 3 24
29 4 18.9
29 5 18.9
29 6 18.9
29 7 NULL
29 8 NULL
29 9 27.1
29 10 27.1
29 11 6.5
29 12 6.5
:
SELECT
gid,
max_height
FROM
(
SELECT gid, max_height,
ROW_NUMBER() OVER (PARTITION BY gid ORDER BY freq DESC) AS rn
FROM (
SELECT gid, max_height, COUNT(id) AS freq
FROM my_table
GROUP BY 1, 2
order by 1,2
) hgt_freq
) ranked_hgt_req
WHERE rn = 1
しばらく、MY_TABLEのような3つの列が含まれていますGIDの場合は、クエリの= 22の出力である:GID = 22の場合について
gid max_height
3 21.4
22 22.1
29 24.0
、二つの最も反復値、すなわち、23.1および22.1があります。したがって、クエリは23.1を返します。誰も私にこの問題を解決する方法を教えてもらえますか、これを行うにはより良いアプローチがありますか?プロセスは大規模レコード(gid)の自動化が必要です。
が、私はそれはあなたのケースではGID = 29、24を返したか疑問。私のために、それは18.9を返しました。私はgid 3、22、29のmax_heights 21.4、23.1、18.9を得ました。私は困惑しています。どんなアイデアなんだろう? –
これは、 'max_height'の順序が未定義であるためです。修正された答えを見てください。 – klin
はい、うまくいきました!ありがとうございました。 –