テーブル内の平均角度 (角度単位[0, 360]
) を計算するには、次のステートメントを使用します。
SELECT
(CASE WHEN (a < 0.0)
THEN a + 360.0
ELSE a END) as angle
FROM (
SELECT
degrees(atan2(avg(sin(radians(x))), avg(cos(radians(x))))) as a
FROM
angle_t
) as t
UNION
SELECT
x
FROM
angle_t
テストに関しては、yahoo の気象データを含むテーブルを試しました。
WITH angle_t(x) AS (
SELECT
cast(wind_direction as double precision)
FROM
weather_yahoo
WHERE
time >= current_date - interval '1 days' - interval '1 hours'
AND
time <= current_date - interval '1 days')
出力は次のとおりです。
246.670436944698
250.0
240.0
なぜ平均角度が 245 ではなく 246.67 なのか疑問に思ったので、明らかに等しい入力データを使用して別のテストを実行しました。
WITH angle_t(x) AS (VALUES
(240 :: double precision),
(250))
出力は、(予期しない) 予期しない結果を示しました。
245.0
250.0
240.0
誰かが私にこれを説明できますか? (これは PostgreSQL 8.4 です)